angular - 订阅触发两次
问题描述
我尝试在两个组件之间进行通信,一个是 dialog.component.ts,另一个是 admin.component.ts,它们之间有一个服务。
所以在我的对话框中,我有一个表单,它使用 ngsubmit 触发了服务
collectSubmitForm(any) {
var myObj= new Object({form: any,typeOfForm: this.data.titleDialog});
this.dialogContentService.getCollectFormContent(myObj);
}
在我的 dialogService 中,我有:
private dialogFormContent = new Subject<any>();
dialogFormContentUpdate$ = this.dialogFormContent.asObservable();
constructor() {
}
getCollectFormContent(dataAsParams) {
this.dialogFormContent.next(dataAsParams);
this.dialogFormContent = new Subject<any>();
}
在我的 admin.component.ts 我有://Todo a revoir 2 call
constructor(private dialogService: DialogService) {
this.collectDataFromDialog();
}
collectDataFromDialog() {
this.subscription = this.dialogService.dialogFormContentUpdate$.subscribe(valueFromFormDialog => {
if(valueFromFormDialog){
this.subscriptionValueFromDialog = valueFromFormDialog;
this.anOtherFunction(this.subscriptionValueFromDialog)
}
});
}
ngOnDestroy() {
this.subscription.unsubscribe()
}
我不知道为什么订阅被调用两次
解决方案
早上好 :D
可能是这部分代码
getCollectFormContent(dataAsParams) {
this.dialogFormContent.next(dataAsParams);
this.dialogFormContent = new Subject<any>();
}
我认为您需要像这样删除新的 Subject() :
getCollectFormContent(dataAsParams) {
this.dialogFormContent.next(dataAsParams);
}
试试看 :D
推荐阅读
- java - 使用 java 注解创建局部变量
- google-cloud-firestore - 使用虚幻引擎的 VaRest 插件从 Firestore 读取数据的最佳方法?
- ruby-on-rails - 使 WebSocket 与 Ruby on Rails 与 Puma 和 Nginx 一起工作
- node.js - Multipart/form-data 使用 axios API Rest 发送空数据
- c - 我如何在这里获得最后一个 printf 语句来打印用户输入的 x 和 y 的输出?
- sql - case 语句不返回所有值
- regex - 如何使用 regex_substr 从 xml 文件中解析多个文件名
- gcc - 无法使用 ml/ml64 组装
- sql-server - 如果子查询没有返回结果,为什么“= ALL(子查询)”评估为真?
- latex - 引文中的扩展链接