angular - 关闭前一个后,一个一个地打开几个mat-dialogs

标签 angular typescript rxjs angular-material mat-dialog

在我的代码中,我有一个按钮,可以浏览数据列表并为每个数据打开一个 mat-dialog

不幸的是,在循环过程中,所有 mat-dialogs 打开。

我希望发生的是,通过使用 dialogRef.afterClosed() 方法,根据结果 (true) 下一个 mat-dialog 打开或 (false) 循环结束。

openDialog(): void {
  this.data.forEach(data => {
    const dialogRef = this.dialog.open(DialogOverviewExampleDialog, {
      disableClose: true
    });
    dialogRef.componentInstance.data = data;

    dialogRef.afterClosed().subscribe(result => {
      if (result) {
        // open next mat-dialog
      } else {
        // stop loop
      }
    });
  });
}

<div mat-dialog-actions>
  <button mat-button (click)="_dialogRef.close(true)">Ok</button>
  <button mat-button (click)="_dialogRef.close(false)">Cancel</button>
</div>

StackBlitz Here

我该怎么做?我不知道该怎么做。

感谢您的帮助。

最佳答案

你可以通过 rxjs takeWhile 实现这一点

from(this.data)
      .pipe(
        concatMap(x => {
          const dialogRef = this.dialog.open(DialogOverviewExampleDialog, {
            disableClose: true
          });

          dialogRef.componentInstance.data = x;

          return dialogRef.afterClosed();
        }),
        takeWhile(Boolean)
      ).subscribe();

参见 https://stackblitz.com/edit/open-mat-dialogs-one-by-one-after-the-previous-one-is-cl-yqprmt?file=src/app/dialog-overview-example.ts

关于angular - 关闭前一个后,一个一个地打开几个mat-dialogs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64460217/

相关文章:

angular - apollo-angular 中的 token 刷新错误

javascript - typescript 创建来自变量的类型的对象

javascript - Node.js Typescript如何将Request.payload分配给自定义接口(interface)

angular - 何时取消订阅 `route.params` observable

Angular 2 : Cannot read property 'validator' of undefined

angular - 垫日历 : Display only month and year

Angular 2 - 从本地 json 获取数据以填充下拉列表

typescript - mongoDB,带有 $sum 和 $count 的 mongoose 聚合查询

angular - 如何在异步管道上使用自定义管道?

javascript - 将可观察数组值累积到单个最终数组中