我得到了一个关于Angular如何处理异步管道的快速问题:给定下面的代码块,如果我在一个将被呈现N次的元素中调用一个函数,并使用异步管道将可观察对象的值作为参数传递给它,那么传递给这些函数执行的订阅是共享的还是独立的订阅?
<ng-container *ngFor="...">
<div>{{ getSomeValue(myObservable$ | async) }}</div>
</ng-container>谢谢!!
发布于 2021-04-14 08:06:27
每个异步管道都会产生一个新的订阅。因此,为了避免不必要的预订,您可以使用*ngIf方法
<ng-container *ngIf="(myObservable$ | async) as myValue">
<ng-container *ngFor="...">
<div>{{ getSomeValue(myValue) }}</div>
</ng-container>
</ng-container>myObservable$ | async将计算并绑定到myValue的值,然后它就可以在模板子树中使用,而无需进一步订阅。
发布于 2021-04-14 08:17:38
除了正常答案之外,不会调用具有ASYNC值的方法
每次发生变化检测时,它都会一次又一次地订阅和取消订阅所有可观察到的内容。您可以使用noam的答案,也可以在需要时尝试映射列表
public list$ = this.myObservable.pipe(map(obsValue => this.array.map(row => this.getSomeValue(obsValue)));这会有更好的性能,因为否则angular会每秒调用你的getSomeValue 10次。
https://stackoverflow.com/questions/67083437
复制相似问题