Множественные диалоговые окна, для цикла, открытие - угловой 7 + угловой материал

У меня есть ситуация, когда я получаю из API String массив кодов проверки. Также у меня есть маппер, где я получаю описание кода на лицевой стороне.

Вопрос в том, можно ли отобразить диалог материала после закрытия предыдущего?

Мой код:

.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 ответ

Если я правильно понял, вы хотите открывать диалоги один за другим для каждого элемента в возвращаемом массиве?

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
    });
}
Другие вопросы по тегам