Mat*_*ler 8 observable rxjs angular
举这些例子:
<ng-container *ngIf="vo$ | async; let vo">
Run Code Online (Sandbox Code Playgroud)
和
<ng-container *ngIf="vo$ | async as vo">
Run Code Online (Sandbox Code Playgroud)
它们有相同的目的,将可观察到的最新值获取到变量中vo
。
但这两种语法有什么区别吗?
问题可能更多是关于结构指令如何工作而不是异步管道。as
和let
语法是结构指令使用的 Angular 模板语法的一部分。
与 Angular Template 语法方面没有什么区别。它们是 Angular 模板的有效语法。
然而,它们的强类型化方式有所不同。看一下ng_if.ts
来自 Angular 源代码的以下代码
/**
* @publicApi
*/
export class NgIfContext<T = unknown> {
public $implicit: T = null!;
public ngIf: T = null!;
}
Run Code Online (Sandbox Code Playgroud)
结构指令作者可以帮助消费者提供强类型上下文。由于存在as
和let
,上下文还需要考虑两者
$implicit
允许let
类型安全ngIf
(或指令的选择器)允许as
类型安全进一步解释:$implicit
是一个特殊属性,允许 a 的使用者ng-template
通过以下方式获取上下文的隐式数据:let someVar
<ng-template let-implicit let-someNamedVar="someNamedVar"></ng-template>
Run Code Online (Sandbox Code Playgroud)
对于 的情况*ngIf
,我们可以将 重写<ng-container *ngIf
为长形式,这样我们就可以了解 的NgIfContext
意义
<!-- <ng-container *ngIf="vo$ | async as vo"></ng-container> -->
<ng-template [ngIf]="vo$ | async" let-vo="ngIf">
<ng-container></ng-container>
</ng-template>
<!-- <ng-container *ngIf="vo$ | async;let vo"></ng-container> -->
<ng-template [ngIf]="vo$ | async" let-vo>
<ng-container></ng-container>
</ng-template>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1471 次 |
最近记录: |