行为主题订阅增加一

时间:2019-02-15 00:43:32

标签: angular behaviorsubject

我正在尝试对代码进行故障排除。 我希望订阅会在.next()和初始化上触发。

但是它第一次触发一次,然后我导航离开并返回到该组件并触发下一个,它触发两次。 然后我离开并返回,并触发三分法。

我已经检查了所有调用.next()的函数,它们仅被触发一次,但订阅仍在增加。

我的行为主体位于服务内部,当我单击某个组件时,它将调用服务内的下一个函数。

关于我还能在其他地方检查问题或如何解决的任何想法

1 个答案:

答案 0 :(得分:0)

从您的描述看来,您似乎并没有取消订阅组件中的BehaviorSubject 。如果您不取消订阅,则每次初始化该组件(导航至该组件)时,都会为行为主题创建一个新的订阅。由于您在导航离开时不会取消对该BehaviorSubject的订阅,因此该订阅将保持活动状态。因此,当您第二次返回时,又创建了另一个订阅,然后您开始接收多个next()通知。这种行为被称为内存泄漏。

在您订阅行为主题的组件中,您将需要执行以下操作:

export class AppComponent implements OnInit, OnDestroy {
  private mySub;

  constructor(private yourService: YourService){}

  ngOnInit(){
    this.mySub = this.yourService.yourBehaviorSubject.subscribe({
      next: _ => //Do stuff
    });
  }

  ngOnDestroy(){
    this.mySub.unsubscribe();
  }

}

这当然是所有关于您的根本问题的猜测,因为您没有提供任何代码!如果我怀疑是错误的,请提供一些代码。那会大大帮助! :)