首页 > 解决方案 > 行为主题的订阅增加一

问题描述

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

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

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

我的行为主体在服务内,当我单击一个组件时,它会调用服务内的下一个函数。

关于我可以在哪里检查问题或如何检查的任何想法

标签: angularbehaviorsubject

解决方案


根据您的描述,听起来您并没有取消订阅您的组件中的 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();
  }

}

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


推荐阅读