Angular 2.0.1 AsyncPipe不适用于Rx主题

Ser*_*nho 3 rxjs subject-observer behaviorsubject angular2-template angular

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

问题是NgFor和asyncPipe无法与Subject一起使用,这是一个问题吗?

这有效:

零件:

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

  getFoo(){
     return this.foo.asObservable();
  }
}
Run Code Online (Sandbox Code Playgroud)

模板

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

这不起作用:

零件

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

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

  getFoo(){
     return this.foo.asObservable();
  }
}
Run Code Online (Sandbox Code Playgroud)

模板

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

Ser*_*nho 5

这里的问题是从我的模板中调用方法-这意味着每次运行更改检测时,我都会调用您的getFoo()函数,该函数返回可观察对象的新实例,该实例将重置异步管道。

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

Solucion,在组件中创建一个可观察的变量。