我遇到的情况是从验证代码的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时,仅得到一个对话框,如示例中所示,没有它,我同时打开了所有对话框。
请咨询
答案 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
});
}