这个 Angular 异步管道的正确含义是啥?

Posted

技术标签:

【中文标题】这个 Angular 异步管道的正确含义是啥?【英文标题】:What is the correct meaning of this Angular async pipe?这个 Angular 异步管道的正确含义是什么? 【发布时间】:2019-04-11 03:14:06 【问题描述】:

我对 Angular 很陌生,我对这段代码有以下疑问。

在一个视图中我有这个代码:

<li *ngFor="let hero of heroes$ | async" >
  <a routerLink="/detail/hero.id">
    hero.name
  </a>
</li>

迭代heroes$。这不是一个数组,而是一个 Observable,因为它正在处理相关组件的这个属性:

heroes$: Observable<Hero[]>;

这对我来说不是很清楚。

按照我的解释(请确认或反驳)。

*ngFor 不能直接迭代 heroes$,因为它是 Observable

这个 Observable 发出一个 Hero 数组,但这是异步行为。

async 管道是订阅此 Observable 的东西,当它准备好(发出数组时)*ngFor指令可以迭代这个数组。

实际上,通过这种方式,我可以直接在视图中执行此操作,而不是在订阅 Observable 的组件中执行此操作。

【问题讨论】:

你的假设是正确的。 async 管道也会在组件被销毁时自动取消订阅,如 the documentation 中所述。 【参考方案1】:

如果你这样写,那就更清楚了: (heroes$ | async) as heroList

【讨论】:

以上是关于这个 Angular 异步管道的正确含义是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Angular 5:使用异步管道搜索 - 显示加载指示器

Angular 2 (ng2) 在 [class.whatever] 中使用异步管道

在 Angular 中组合可观察数据的正确方法是啥?

Angular 中的不纯管道是啥?

Angular 5:无法使用异步管道更新模板

Angular *ngFor 使用异步管道绑定到 observable - 发生了啥?