更改 Angular2 异步管道的订阅

Fra*_*sco 2 rxjs angular

我有一个案例,我在 angular2 组件中使用异步管道并将可观察对象传递给它。这很好用。

我想要的是稍后,当组件仍然“活着”时,即: OnDestroy 尚未被调用(因此订阅了异步管道),取消订阅该可观察对象并订阅另一个。

我怎样才能做到这一点?

这里有一些伪代码来暴露这种情况:

@Component({
  selector: 'pack',
  template: `
    <wolf *ngFor="let wolf of pack | async">
      ...
    </wolf>
  `
})
export class PackComponent implements DoCheck {

    pack;

    constructor(){
      this.pack = Observable.of(northwesthernWolves: Wolf[])
    }

    onDoCheck() {
      if(some condition) {
        this.pack = Observable.of(redWolves: Wolf[])
      }
    }
}
Run Code Online (Sandbox Code Playgroud)

Est*_*ask 5

考虑到框架已经发布,可以安全地假设它已经处理了这个问题。事实上,它是这样的

...
if (obj !== this._obj) {
  this._dispose();
  return this.transform(obj);
}
...
Run Code Online (Sandbox Code Playgroud)

当新的 observable 被分配给类属性时,旧的会被async管道自动取消订阅。

相反的行为会导致内存泄漏,并可能被视为错误。