角度材质对话框-关闭时发送数据

时间:2018-11-07 08:11:06

标签: angular typescript dialog

关闭对话框后(即使用户单击异地或按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,我也想发送数据。

我在模态中有一个变量,无论用户关闭模态的方式如何,我都想重述它。

2 个答案:

答案 0 :(得分:1)

如果要更改默认数据,请按以下步骤进行。

dialogRef.afterClosed().pipe(
  map(result => !result ? 'Default data' : result),
).subscribe(...);

此测试将测试虚假值(''undefinednull0 ...),并且由于对话框的默认返回值为{{ 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
})

使用服务,您可以按照需要进行任何更改。 这种方法的好处是父组件对后台的更改做出反应,当我关闭对话框时,所有更改都已在父组件中提供。