这个问题很常见,有些人倾向于在服务中使用某些组件:
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();
}
这是详细讨论并了解任何方法的利弊的问题!所以我的问题是谁&为什么?
简而言之:
Observable
从未完成并且您没有手动取消订阅ngOnDestroy
生命周期挂钩时,很危险async
管道)。之所以安全,是因为没有挂起订阅的风险,不会引起内存泄漏。借助rxjs运算符,您仍然可以将pipe
d Observable
暴露给模板并在组件级别执行各种操作,而不会冒任何内存泄漏的危险