在Angular中在服务或组件中订阅的位置,为什么?

时间:2020-03-05 19:32:50

标签: angular service subscribe

这个问题很常见,有些人倾向于在服务中使用某些组件:

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();
 }

要详细讨论并了解任何方法的利弊是一个问题! 所以我的问题是哪个和为什么?

1 个答案:

答案 0 :(得分:0)

简而言之:

  • 订阅服务:并没有真正的用处,因为服务旨在保留状态,共享该状态并通知状态更改。服务并非旨在对状态更改做出反应
  • 订阅该组件Observable从未完成并且您没有手动取消订阅ngOnDestroy生命周期挂钩时不安全
  • 让框架为您订阅(例如,使用async管道)。之所以安全,是因为没有挂起订阅导致内存泄漏的风险。借助rxjs运算符,您仍然可以向模板公开pipe d Observable并在组件级别执行各种操作,而不会冒任何内存泄漏的风险(即使回调引用了this)< / li>