Множественные диалоговые окна, для цикла, открытие - угловой 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
});
}