Если вы используете диалог материалов, диалоги дают вам наблюдаемую информацию, которую вы можете наблюдать, чтобы увидеть, когда диалог закрыт.если вы установите переменную, которую вы можете наблюдать, когда она будет закрыта, например:
createNewButtonClicked(tableType: string) {
// your existing logic
// ...
const dialog = this.dialog.open(ClientDialogComponent, dialogConfig);
// example dialog .afterClosed
dialog.afterClosed().subscribe(closeResult => {
// update from database after dialog is closed
});
}
Вы можете использовать свойство Output, чтобы сообщить родительским компонентам, что что-то произошло внутри дочернего элемента.Внутри функции подписки (где я помещаю комментарий для обновления базы данных) находится место, где вы бы хотели, чтобы диалоговое окно было закрыто.Ваш код для списка может выглядеть примерно так: @Output () dialogClosed = new EventEmitter ();
createNewButtonClicked(tableType: string) {
const dialogConfig = new MatDialogConfig();
dialogConfig.width = '60%';
dialogConfig.autoFocus = true;
let dialog;
switch (tableType) {
case 'clients': {
dialog = this.dialog.open(ClientDialogComponent, dialogConfig);
break;
}
case 'projects': {
dialog = this.dialog.open(ProjectDialogComponent, dialogConfig);
break;
}
case 'users':{
dialog = this.dialog.open(UserDialogComponent, dialogConfig);
break;
}
}
// check to see if dialog was opened
if (!!dialog) {
dialog.afterClosed().subscribe(closeResult => {
// emit that dialog was closed
this.dialogClosed.next();
});
}
}
Затем в компоненте вашей пользовательской таблицы следите за тем, чтобы событие было отправлено:
<app-table-list (dialogClosed)="onDialogClosed($event)"></app-table-list>
И, наконец, ваши пользовательские таблицы ts.Обратите внимание, что я не вызываю ngOnInit, когда диалоговое окно закрывается, поскольку цель ngOnInit - инициализация.Поэтому извлеките логику базы данных внутри ngOnInit в другой метод и вызовите этот метод для обновления данных, когда диалоговое окно также закрыто:
ngOnInit() {
this.getData();
}
onDialogClose() {
this.getData();
}
private getData() {
// make database calls here and update data from response
}
Вы должны использовать только ngOnInit для инициализации представления, так как вы можете устанавливать некоторыездесь значения по умолчанию, которые вы не хотите сбрасывать, поэтому рекомендуется не вызывать ngOnInit снова позже в жизненном цикле страниц