如何在另一个模式关闭时打开 angular 2 material 模式
How to open a angular 2 material modal when another modal is closed
我有一个名为 medicoesSelecionadas Selected 的列表,我需要使用列表中的每个元素打开一个模态,但代码只能在前一个模态关闭时打开另一个模态。
我试过这段代码:
this.medicoesSelecionadas.forEach(medicao => {
let historicoEmpreiteiro;
this.loading = true;
console.log(' ENTORU AQUI ')
this.medicaoEmpService.ObterHistoricoEmpreiteiro(medicao.id)
.subscribe(result => {
this.loading = false;
historicoEmpreiteiro = result;
const refDialog = this.dialog.open(DescontoEmpreiteiroComponent, {
data: { historicoEmpreiteiro: JSON.stringify(historicoEmpreiteiro) }
});
refDialog.afterClosed().subscribe(r => {
console.log('Entrou closed');
});
});
console.log(' ENTORU ALI ')
});
但问题是,foreach同时打开所有模态框
假设:this.medicoesSelecionadas 是一个对象数组
只要this.medicoesSelecionadas数组不是很长,我可能会用递归来解决这个问题。假设您上面的代码在一个名为 'existingFunc()' 的函数中,我将执行如下操作:
existingFunc() {
this.recursiveFunc(this.medicoesSelecionadas);
}
recursiveFunc(medicoesSelecs: Array<Object>) { // replace this type with the correct one
if (medicoesSelecs.length > 0) {
let medicao = medicoesSelecs.shift(); // remove first item from array
let historicoEmpreiteiro;
this.loading = true;
console.log(' ENTORU AQUI ');
this.medicaoEmpService.ObterHistoricoEmpreiteiro(medicao.id)
.subscribe(result => {
this.loading = false;
historicoEmpreiteiro = result;
const refDialog = this.dialog.open(DescontoEmpreiteiroComponent, {
data: { historicoEmpreiteiro: JSON.stringify(historicoEmpreiteiro) }
});
refDialog.afterClosed().subscribe(r => {
console.log('Entrou closed');
this.recursiveFunc(medicoesSelecs); // call self with remaining array
});
});
console.log(' ENTORU ALI ');
}
}
}
这会产生一些开销,因为所有函数都将保留在堆栈中,直到最后一个函数最终关闭,因此您需要注意不要以太大的数组开始调用。
我有一个名为 medicoesSelecionadas Selected 的列表,我需要使用列表中的每个元素打开一个模态,但代码只能在前一个模态关闭时打开另一个模态。
我试过这段代码:
this.medicoesSelecionadas.forEach(medicao => {
let historicoEmpreiteiro;
this.loading = true;
console.log(' ENTORU AQUI ')
this.medicaoEmpService.ObterHistoricoEmpreiteiro(medicao.id)
.subscribe(result => {
this.loading = false;
historicoEmpreiteiro = result;
const refDialog = this.dialog.open(DescontoEmpreiteiroComponent, {
data: { historicoEmpreiteiro: JSON.stringify(historicoEmpreiteiro) }
});
refDialog.afterClosed().subscribe(r => {
console.log('Entrou closed');
});
});
console.log(' ENTORU ALI ')
});
但问题是,foreach同时打开所有模态框
假设:this.medicoesSelecionadas 是一个对象数组
只要this.medicoesSelecionadas数组不是很长,我可能会用递归来解决这个问题。假设您上面的代码在一个名为 'existingFunc()' 的函数中,我将执行如下操作:
existingFunc() {
this.recursiveFunc(this.medicoesSelecionadas);
}
recursiveFunc(medicoesSelecs: Array<Object>) { // replace this type with the correct one
if (medicoesSelecs.length > 0) {
let medicao = medicoesSelecs.shift(); // remove first item from array
let historicoEmpreiteiro;
this.loading = true;
console.log(' ENTORU AQUI ');
this.medicaoEmpService.ObterHistoricoEmpreiteiro(medicao.id)
.subscribe(result => {
this.loading = false;
historicoEmpreiteiro = result;
const refDialog = this.dialog.open(DescontoEmpreiteiroComponent, {
data: { historicoEmpreiteiro: JSON.stringify(historicoEmpreiteiro) }
});
refDialog.afterClosed().subscribe(r => {
console.log('Entrou closed');
this.recursiveFunc(medicoesSelecs); // call self with remaining array
});
});
console.log(' ENTORU ALI ');
}
}
}
这会产生一些开销,因为所有函数都将保留在堆栈中,直到最后一个函数最终关闭,因此您需要注意不要以太大的数组开始调用。