Как заявил windmaomao, вам нужно вручную вызвать метод close (). Компонент Material Dialog proivide Наблюдается только после afterClose () или beforeClose (), и эти методы прослушивают данные, переданные методом close (). Метод close () закрывает диалог, что не является нашим ожиданием. Вам необходимо реализовать свою собственную систему связи между компоновкой и построением диалога с помощью вида Observable или EventEmitter. Я подготовил упрощенное решение вашей проблемы. Трюк заключается в том, что вы можете получить ссылку на любое поле или метод вашего компонента диалога с помощью «componentInstance» getter.
Компонент диалога
import {Component, EventEmitter, OnInit} from '@angular/core';
import {MatDialogRef} from "@angular/material";
@Component({
selector: 'app-simple-dialog',
template: `<h2 mat-dialog-title>Entering some data</h2>
<mat-dialog-content>Is data OK?</mat-dialog-content>
<mat-dialog-actions>
<button mat-button (click)="actionNo()">No</button>
<button mat-button (click)="actionYes()">Yes</button>
</mat-dialog-actions>`,
styleUrls: ['./simple-dialog.component.css']
})
export class SimpleDialogComponent implements OnInit {
private _action: EventEmitter<boolean> = new EventEmitter<boolean>();
answer = this._action.asObservable();
constructor(public dialogRef: MatDialogRef<SimpleDialogComponent>) { }
actionYes() {
this._action.next(true);
}
actionNo() {
this._action.next(false);
}
closeDialog() {
this.dialogRef.close();
}
ngOnInit() {
}
}
И HTML-код выдержки фрагмента, который будет включен в ваш основной компонент:
<button (click)="openDialog()">Open Dialog</button>
Код метода openDialog ():
openDialog() {
let dialogRef = this.dialog.open(SimpleDialogComponent);
dialogRef.componentInstance.answer.subscribe( answer => {
console.log('Answer from Dialog: ' + answer);
switch(answer) {
case true:
console.log('Data is OK. Closing dialog');
//do some complicated stuff
dialogRef.componentInstance.closeDialog();
//can be simple: dialogRef.close();
break;
case false:
console.log('Data is not OK. Not closing dialog. Show some toaster');
break;
}
}
)
}