这个问题很常见,有些人倾向于在服务中使用某些组件:
Angular 2 subscribe from component or service?:它说永远不要从组件进行手动订阅!
如果我们不想要任何数据,那为什么我们需要订阅(在服务中)?以及何时取消订阅会被调用?
如果我们要订购组件:
this.serviceA.getMethodObservable().subscribe(data => {
this.data = data;
});
注意:订阅永远不会退订!
如果Observable无法独自完成,则整个组件,模板和所有相关对象将永远存在于内存中。
为此,我们使用
// onDestroy: subject
this.serviceA.getMethodObservable()
.pipe(takeUntil(this.onDestroy))
.subscribe(data => {
this.data = data;
});
ngOnDestroy() {
this.onDestroy.next();
}
要详细讨论并了解任何方法的利弊是一个问题! 所以我的问题是哪个和为什么?
答案 0 :(得分:0)
简而言之:
Observable
从未完成并且您没有手动取消订阅ngOnDestroy
生命周期挂钩时不安全async
管道)。之所以安全,是因为没有挂起订阅导致内存泄漏的风险。借助rxjs运算符,您仍然可以向模板公开pipe
d Observable
并在组件级别执行各种操作,而不会冒任何内存泄漏的风险(即使回调引用了this
)< / li>