angular - 行为主题的订阅增加一
问题描述
我正在尝试对我的代码进行故障排除。我希望订阅在 .next() 和初始化时触发。
但它第一次触发一次,然后我离开并返回组件并触发下一个,它会触发两次。我导航离开并返回,它会触发三次。
我检查了所有调用 .next() 的函数,它们只触发一次,但订阅仍在增加。
我的行为主体在服务内,当我单击一个组件时,它会调用服务内的下一个函数。
关于我可以在哪里检查问题或如何检查的任何想法
解决方案
根据您的描述,听起来您并没有取消订阅您的组件中的 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();
}
}
这当然是关于您的根本问题是什么的猜测,因为您没有提供任何代码!如果我的怀疑是错误的,请提供一些代码。那将有很大帮助!:)
推荐阅读
- c++ - 唯一指针的 C++ 向量
- javascript - 如何用虚拟键盘写出光标所在的字符?
- python - 如何使用 rmtree() 删除文件夹和文件
- debugging - 调试模式:MACDOC;TRDEBG USAGE
- html - flex: 1 不在 safari 上滚动?
- php - DB::select 过程从输入请求返回空数组
- javascript - 用于将一种 JSON 格式转换为另一种 JSON 格式的 Java 脚本
- vue.js - Vue:找不到模块'@/views/layout'
- devops - 如何从 api 在 cisco ucs manager 中创建用户?
- javascript - jquery popup中的事件被多次触发