Ali*_*avi 5 service subscribe angular
这个问题很常见,有些人喜欢在服务中使用,有些则在组件中使用:
Angular 2 订阅组件或服务?:它说永远不要从组件进行手动订阅!
如果我们不需要任何数据那么为什么我们需要订阅(服务中)?何时取消订阅将被调用?
如果我们从组件订阅:
this.serviceA.getMethodObservable().subscribe(data => {
this.data = data;
});
Run Code Online (Sandbox Code Playgroud)
注意:订阅永远不会取消订阅!
如果 Observable 无法自行完成,那么整个组件、模板和所有关联对象将永远存在于内存中。
为此我们使用
// onDestroy: subject
this.serviceA.getMethodObservable()
.pipe(takeUntil(this.onDestroy))
.subscribe(data => {
this.data = data;
});
ngOnDestroy() {
this.onDestroy.next();
}
Run Code Online (Sandbox Code Playgroud)
这是一个需要详细讨论并了解任何方法的利弊的问题!所以我的问题是哪一个以及为什么?
简而言之:
Observable永远不会完成并且您没有在ngOnDestroy生命周期挂钩中手动取消订阅时,这是不安全的async管道)。安全,因为没有挂起订阅导致内存泄漏的风险。借助 rxjs 运算符,您仍然可以向模板公开pipedObservable并在组件级别执行各种操作,而不会面临任何内存泄漏的风险(即使回调引用this)| 归档时间: |
|
| 查看次数: |
16227 次 |
| 最近记录: |