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

问题描述 投票:0回答:1

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

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

这是详细讨论并了解任何方法的利弊的问题!所以我的问题是谁&为什么?

angular service subscribe
1个回答
0
投票

简而言之:

  • 订阅服务:并不是很有用,因为服务旨在保留状态,共享该状态并通知状态更改。服务不旨在对状态更改做出反应
  • 订阅组件:Observable从未完成并且您没有手动取消订阅ngOnDestroy生命周期挂钩时,很危险
  • 让框架为您订阅(例如:使用async管道)。之所以安全,是因为没有挂起订阅的风险,不会引起内存泄漏。借助rxjs运算符,您仍然可以将pipe d Observable暴露给模板并在组件级别执行各种操作,而不会冒任何内存泄漏的危险
© www.soinside.com 2019 - 2024. All rights reserved.