我正在尝试对代码进行故障排除。 我希望订阅会在.next()和初始化上触发。
但是它第一次触发一次,然后我导航离开并返回到该组件并触发下一个,它触发两次。 然后我离开并返回,并触发三分法。
我已经检查了所有调用.next()的函数,它们仅被触发一次,但订阅仍在增加。
我的行为主体位于服务内部,当我单击某个组件时,它将调用服务内的下一个函数。
关于我还能在其他地方检查问题或如何解决的任何想法
答案 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();
}
}
这当然是所有关于您的根本问题的猜测,因为您没有提供任何代码!如果我怀疑是错误的,请提供一些代码。那会大大帮助! :)