首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当我在要迭代的元素中调用异步管道时,它会被创建为单个共享订阅还是多个共享订阅?

当我在要迭代的元素中调用异步管道时,它会被创建为单个共享订阅还是多个共享订阅?
EN

Stack Overflow用户
提问于 2021-04-14 07:02:47
回答 2查看 36关注 0票数 1

我得到了一个关于Angular如何处理异步管道的快速问题:给定下面的代码块,如果我在一个将被呈现N次的元素中调用一个函数,并使用异步管道将可观察对象的值作为参数传递给它,那么传递给这些函数执行的订阅是共享的还是独立的订阅?

代码语言:javascript
运行
复制
<ng-container *ngFor="...">
  <div>{{ getSomeValue(myObservable$ | async) }}</div>
</ng-container>

谢谢!!

EN

回答 2

Stack Overflow用户

发布于 2021-04-14 08:06:27

每个异步管道都会产生一个新的订阅。因此,为了避免不必要的预订,您可以使用*ngIf方法

代码语言:javascript
运行
复制
<ng-container *ngIf="(myObservable$ | async) as myValue">
    <ng-container *ngFor="...">
       <div>{{ getSomeValue(myValue) }}</div>
    </ng-container>
</ng-container>

myObservable$ | async将计算并绑定到myValue的值,然后它就可以在模板子树中使用,而无需进一步订阅。

票数 2
EN

Stack Overflow用户

发布于 2021-04-14 08:17:38

除了正常答案之外,不会调用具有ASYNC值的方法

每次发生变化检测时,它都会一次又一次地订阅和取消订阅所有可观察到的内容。您可以使用noam的答案,也可以在需要时尝试映射列表

代码语言:javascript
运行
复制
public list$ = this.myObservable.pipe(map(obsValue => this.array.map(row => this.getSomeValue(obsValue)));

这会有更好的性能,因为否则angular会每秒调用你的getSomeValue 10次。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67083437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档