Как открыть угловой материал из двух материалов, когда другой модал закрыт - PullRequest
0 голосов
/ 25 октября 2018

У меня есть список с именем 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 открывает все модалы одновременно

1 Ответ

0 голосов
/ 25 октября 2018

Предположение: this.medicoesSelecionadas - это массив объектов

Пока массив this.medicoesSelecionadas не очень длинный, я бы, вероятно, решил это с помощью рекурсии.Предполагая, что ваш код выше находится внутри функции с именем'istingFunc () ', я бы сделал что-то вроде следующего:

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 ');
        }
    }
}

Это создаст некоторые издержки, так как все функции останутся в стеке до последнейнаконец-то закрыто, поэтому вы должны быть осторожны, чтобы не вызывать слишком большой массив для начала.

...