关闭对话框后(即使用户单击异地或按ESC时),是否可以通过任何方式将对话框中的数据发送到“父级”?
目前我有一个父母,
父母:
open(){
const dialogRef = this.dialog.open(ModalinvitarComponent, {
width: '90%',
maxWidth: '520px'
});
dialogRef.afterClosed().subscribe(result => {
console.log(result)
});
}
模态关闭时,结果“未定义”
我可以使用以下方式从模态中发送一些数据:
this.dialogRef.close(true)
然后我得到“ true”响应,但是即使用户关闭模态之外的模态单击或按ESC,我也想发送数据。
我在模态中有一个变量,无论用户关闭模态的方式如何,我都想重述它。
答案 0 :(得分:1)
如果要更改默认数据,请按以下步骤进行。
dialogRef.afterClosed().pipe(
map(result => !result ? 'Default data' : result),
).subscribe(...);
此测试将测试虚假值(''
,undefined
,null
,0
...),并且由于对话框的默认返回值为{{ 1}},它将替换为''
。
答案 1 :(得分:0)
今天,我遇到了相同的问题,我的解决方法是:服务和rxjs:
// service.ts
@Injectable({
providedIn: 'root'
})
export class ComunicationService {
observedEvent$ = new Subject<ISomeInterface>();
constructor() { }
eventOcurs(some_object: ISomeInterface) {
observedEvent$.next(some_object);
}
}
然后在对话框组件中(ComunicationService作为comunicationService注入),我正在监视一些事件并将重要对象发射到观察到的流中:
// dialog-component.ts
this.comunicationService.eventOcurs(some_object);
父组件(将ComunicationService作为comunicationService注入)正在订阅更改:
// parent-component.ts
this.comunicationService.observedEvent$.subscribe((some_object) => {
//some action
})
使用服务,您可以按照需要进行任何更改。 这种方法的好处是父组件对后台的更改做出反应,当我关闭对话框时,所有更改都已在父组件中提供。