as 和 let 之间的异步管道区别

2023-11-26

举这些例子:

<ng-container *ngIf="vo$ | async; let vo">

and

<ng-container *ngIf="vo$ | async as vo">

它们有相同的目的,将可观察到的最新值获取到变量中vo.

但这两种语法有什么区别吗?


问题可能更多是关于结构指令如何工作而不是异步管道。as and let语法是结构指令使用的 Angular 模板语法的一部分。

与 Angular Template 语法方面没有什么区别。它们是 Angular 模板的有效语法。

但是,它们的强类型化方式有所不同。看看下面的代码ng_if.ts来自角度来源

/**
 * @publicApi
 */
export class NgIfContext<T = unknown> {
  public $implicit: T = null!;
  public ngIf: T = null!;
}

结构指令作者可以帮助消费者提供强类型上下文。由于有as and let,上下文还需要考虑两者

  • $implicit allows let类型安全
  • ngIf(或指令的选择器)允许as类型安全

进一步解释:$implicit是一种特殊的属性,允许消费者ng-template通过以下方式获取上下文的隐式数据let someVar

<ng-template let-implicit let-someNamedVar="someNamedVar"></ng-template>

如果是*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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

as 和 let 之间的异步管道区别 的相关文章

随机推荐