更新2
该问题与取消订阅时的错误有关。奇怪的是控制台没有显示任何味精,但仍然停止了代码的工作。修复此问题后,它立即起作用。
问题 我正在使用材质 ui 打开 Mat-Dialog 内的组件。当我关闭对话框时,我对 dialogRef 的订阅不会触发。
parentComponent 调用editCatering() 来打开对话框。
父组件:
import { MatDialog } from '@angular/material/dialog';
export class BewirtungListTableComponent ...{
constructor(..., public dialog: MatDialog,...) {}
editCatering(data){
this.requestSub = this.guestService.getGuestsByCateringId(bewirtung.id).subscribe((guest: Guest[]) => {
let dialogRef = this.dialog.open(BewirtungEditComponent, {
data: {data, guest},
disableClose: true,
autoFocus: false
});
dialogRef.afterClosed().subscribe(result=>{
console.log("dialog closed")
console.log(result)
})
};
然后 dialogComponent 在 onSubmit() 调用上关闭;
...
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';
...
export class BewirtungEditComponent ...
constructor(@Inject(MAT_DIALOG_DATA) public data,..., public dialogRef: MatDialogRef<BewirtungEditComponent>){}
onSubmit() {
...
this.updateSub = this.bewirtungService.updateCatering(cateringCreate).subscribe(
(b: Bewirtung) => {
...
this.dialogRef.close(b)
},
() => this.notificationService.error('Die Bewirtung konnte nicht geändert werden.')
);
}
else {...}
}
我在 parentComponent 和 dialogComponent 的状态中检查了 dialogRef:它们具有相同的 ID,并且在关闭 dialogRef 的状态后变为 2。
知道为什么 dialogRef.afterClosed().subscribe() 不做任何事情吗?
更新1
我还测试了将 afterClosed().subscription 移动到 dialogComponent:
onSubmit() {
...
this.updateSub = this.bewirtungService.updateCatering(cateringCreate).subscribe(
(b: Bewirtung) => {
...
this.dialogRef.close(b);
console.log(this.dialogRef)
this.dialogRef.afterClosed().subscribe(()=>console.log("after closed editComponent"))
},
() => this.notificationService.error('Die Bewirtung konnte nicht geändert werden.')
);
}
但即使在那里我什么也得不到。