多个对话框,用于循环,打开-角度7 +角度材质

时间:2020-02-27 12:36:27

标签: angular angular-material angular7 material-dialog

我遇到的情况是从验证代码的API字符串数组获得的。 另外,我还有映射器,可以在前面获得对代码的描述。

问题是,关闭上一个对话框后是否可以显示材料对话框?

我的代码:

.subscribe((res:string[]) => {
            console.log("res: ", res);

            let dialogRef: MatDialogRef<ValidationDialog>;

            for (let i = 0; i < res.length; i++) {
              const code = res[i];
              const description = this.locale.getDescription(code);

              let config      = new MatDialogConfig();
                  config.data = {code: code, description: description.value};

              console.log("dialogRef: ", dialogRef);



                dialogRef = this.dialog.open(ValidationDialog, config);
                console.log("--Dialog--");
                console.log("Data: ", config.data, this.dialog);
                dialogRef.afterClosed().subscribe(data => {
                  console.log("data returned from mat-dialog-close is ", data);
                });

使用if语句,我在其中检查dialogRef时,仅得到一个对话框,如示例中所示,没有它,我同时打开了所有对话框。

请咨询

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您想为您返回的数组中的每个项目一个接一个地打开对话框吗?

private doSomething(): void {
  this.something.subscribe((res: string[]) => {
    this.showDialog(res, 0);
  });
}

private showDialog(data: string[], idx: number): void {
  if (i >= data.length) return; // finished processing list

  const item = data[i];
  // setup...

  const dialog = this.dialog.open(ValidationDialog, config);
  const sub = dialog.afterclosed()
    .subscribe((data) => {
      sub.unsubscribe();
      console.log(`Data from closed dialog: ${data}`);
      console.log('Opening next dialog...');
      this.showDialog(data, idx + 1); // recursively open next dialog
    });
}