我有一个案例,我在 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)
考虑到框架已经发布,可以安全地假设它已经处理了这个问题。事实上,它是这样的:
...
if (obj !== this._obj) {
this._dispose();
return this.transform(obj);
}
...
Run Code Online (Sandbox Code Playgroud)
当新的 observable 被分配给类属性时,旧的会被async管道自动取消订阅。
相反的行为会导致内存泄漏,并可能被视为错误。
| 归档时间: |
|
| 查看次数: |
878 次 |
| 最近记录: |