0

更新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.')
            );
        }

但即使在那里我什么也得不到。

4

0 回答 0