我使用angular2:
this.route.params.subscribe(params => {
//do stuff with params
})
我查看了RxJS docs,并说它可以添加完成回调:
this.route.params.subscribe(params => {
// do stuff with params
}, (err) => { throw err;}, () => {
console.log('Completed!');
});
但这种完成永远不会被解雇。 Angular2对Observables
的使用是否与标准不同?
答案 0 :(得分:1)
ActivatedRoute observable的工作方式没有什么特别之处。你是如何检测完成状态的。但完成可能永远不会发生。当Observable执行observer.complete()时,将调用完成回调,当发送固定数量的数据时(例如,在数组上进行迭代,或从其他某些源获取响应),就会发生这种情况。但是路由参数上的Observable是无限期的 - 用于监听组件生命周期中可能发生的参数的任何更改(因此可以使用相同的组件来提供不同的参数值,从而节省生成所需的时间)组件)。由于这些更改可能来自用户或应用程序的其他部分,因此Observable会持续组件的生命周期,并且不应发生完成的回调。这就是你应该在ngOnDesctroy()方法中取消订阅Observable的原因(防止内存泄漏导致热的Observable挂起)。