0

当对话框组件的构造函数抛出时,我们将永远无法再次打开该对话框。

Stackblitz 示例

对话框构造函数:

  constructor(
    public dialogRef: MatDialogRef<DialogOverviewExampleDialog>,
    @Inject(MAT_DIALOG_DATA) public data: DialogData
  ) {
    if (data.count % 2) {
      throw new Error('permission denied');
    }
  }

调用代码:

  openDialog(): void {
    const dialogRef = this.dialog.open(DialogOverviewExampleDialog, {
      width: '250px',
      data: { count: this.count++ },
    });

    dialogRef.afterClosed().subscribe((result) => {
      console.log('The dialog was closed');
    });
  }

测试:

  1. 单击Open Dialog按钮:对话框打开(关闭)
  2. 再次单击Open Dialog按钮:这次构造函数抛出
  3. 再次点击Open Dialog按钮:这次构造函数根本没有被调用

这是一个错误还是预期的?如果是预期的,请解释原因。

注意:
这些情况很少见,因为我们不会故意在构造函数中抛出异常,而是在OnInit()回调中进行初始化工作。但是,如果无论出于何种原因发生这种情况,我不明白为什么下一个公开电话不起作用。

4

0 回答 0