Вы звоните getAllClients()
только во время перехвата OnInit
жизненного цикла ClientsComponent
. Это означает, что он будет только загружать клиентов при инициализации компонента (именно поэтому вы видите нового клиента при переходе назад и обратно, так как компонент реинициализируется и ловушка жизненного цикла OnInit
снова выстрелил).
Чтобы противостоять этому, у вас есть два варианта (ну, более двух, если вы использовали управление состоянием (например, ngRx)).
1) Когда вы добавили нового клиента и закрыли диалоговое окно, немедленно снова вызовите getAllClients()
, подписавшись на событие afterClosed
MatDialog
this.addClientDialogRef.afterClosed().subscribe(() => { this.getAllClients(); } );
или
2) Предоставьте новый клиентский объект через событие afterClosed
из самого диалогового окна и отправьте новый объект в массив clients
. Единственное предостережение: вам нужно вернуть новый клиентский объект из вашего HTTP-запроса в saveClient
AddClientComponent
saveClient(formdata: any) {
let theForm = this.clientForm.value;
this.clientService.addClient(theForm).subscribe(data => {
if (data.success === false) {
this.toastr.error(data.message);
} else {
this.toastr.success(data.message);
this.ngOnInit();
this.dialogRef.close(data.client); // <--- Assuming the new object comes under the 'client' key of your response.
}
this.clientForm.reset();
});
}
ClientsComponent
addClientDialogRef.afterClosed().subscribe((client: Client) => {
this.clients.push(client);
}
Событие afterClosed
задокументировано (кратко) здесь: https://material.angular.io/components/dialog/overview
MatDialogRef предоставляет дескриптор открытого диалога. Может быть
используется для закрытия диалогового окна и для получения уведомления, когда диалоговое окно
был закрыт.
dialogRef.afterClosed().subscribe(result => { console.log(`Dialog
result: ${result}`); // Pizza! });
dialogRef.close('Pizza!');