Angular 2.0.1 AsyncPipe 不适用于 Rx Subject

标签 angular rxjs angular2-template behaviorsubject subject-observer

AsyncPipe 与 BehaviorSubject 配合使用,但我不想用空数据初始化我的服务,因此我使用 Subject intead。

问题是 NgFor 和 asyncPipe 不适用于 Subject,这是个问题吗?

这个有效:

组件:

export class AppComponent {
  foo = new BehaviorSubject<Array<number>>([1,2,3]);

  getFoo(){
     return this.foo.asObservable();
  }
}

模板

<span *ngFor="let e of foo.asObservable() | async">{{e}}</span>

这行不通:

组件

export class AppComponent {
  foo = new Subject<Array<number>>();

  constructor(){
     setTimeout(() => {
          this.foo.next([1,2,3]);
     }, 3000);
  }

  getFoo(){
     return this.foo.asObservable();
  }
}

模板

<span *ngFor="let e of foo.getFoo() | async">{{e}}</span>

最佳答案

这里的问题是从我的模板调用一个方法 - 这意味着每次运行变化检测时,我都会调用你的 getFoo() 函数,它返回一个新的可观察实例,它会重置异步管道。

因此,无论您在 NgFor 中调用 getFoo(),代码都会失败。

解决方案,在组件中创建一个可观察变量。

关于Angular 2.0.1 AsyncPipe 不适用于 Rx Subject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39902413/

相关文章:

angular - 订阅 *ngIf 背后的 DOM 事件

node.js - 如何处理级联可观察值

operators - 如何获得 react 流中最后两个项目的滚动缓冲区?

angular - 如何将 html 字符串传递给我的子组件?

javascript - 在数组中查找具有相同值属性的对象

Angular 2 组件之间的单向绑定(bind)

css - 如何使用 Angular 2+ 指令从选项卡自定义背景颜色?

html - 页面上三列带有图像的方形卡片 - angular2,bootstrap

javascript - Angular 8 : Array . map() .slice() 没有函数

javascript - Angular 6 从 url 中删除查询字符串