0

我在使用 MatDialog 时遇到了一个奇怪的问题。在我的主要组件中,我使用运行 webworker 的 @Injectable 服务在后台处理某些内容。处理完成后,服务打开 MatDialog。在此对话框中,有 2 个按钮(每个按钮都关闭对话框)。

close(result: boolean) {
  this.dialogRef.close(result);
}

问题是它很少在我单击按钮后立即关闭,有时我必须等待 20 秒才能关闭。我注意到,在单击按钮并单击其他内容后,对话框会立即关闭(焦点丢失或其他内容?)。我认为关闭对话框的方式有问题,但我在主组件的 onInit 方法中运行它,它工作正常。这意味着它与异步代码有关。有谁知道如何解决它?

4

1 回答 1

0

检测关闭方法的变化:

close(result: boolean) {
  this.dialogRef.close(result);
  this.cd.detectChanges();
}

构造函数将是:

constructor(private cd: ChangeDetectorRef) {
}

注意到在我单击按钮并单击其他内容后,对话框立即关闭(焦点丢失或其他内容?)

当您移动鼠标或单击时,Angular 会检测到变化,从而导致您的对话框关闭。您需要做的是手动检查close()方法的变化。

于 2020-06-09T14:48:49.600 回答