如何等待对话框的材料响应继续我的功能?

时间:2019-01-24 17:02:16

标签: angular typescript

在确定的功能启用时刻,我打开了一个实质性对话框,我需要等待对话框的回答才能继续执行我的功能,但是该功能在我选择确认对话框之前正在运行。

我尝试了一些事情

我的默认功能:

alteraDadosProduto(){ 
    let confirmouAtualizacaoProduto = this.verificaProdutoPossuIAnuncio();
    if(confirmouAtualizacaoProduto == false){
      return ;
    }

... functions continue

我的对话框功能:

verificaProdutoPossuIAnuncio(): boolean{
    if(this.produtosConfirmadosAnuncio[0].anuncio.length == 0){
      return true;
    }else{
      const dialogRef = this.dialog.open(DialogConfirmacaoAtualizacaoAnuncioComponent);
      dialogRef.afterClosed().subscribe(result => {
        if(result == true){
          return true;
        }else{
          return false;
        }
    })
  }
}

如何等待订阅结果继续我的alteraDadosProduto功能?谢谢

4 个答案:

答案 0 :(得分:0)

您应订阅look at here

答案 1 :(得分:0)

Sory无法写commnet(低代表)。 我不完全了解你。 但是,如果您需要在对话框关闭后将数据传递到result,例如:

    import {MdDialogRef} from '@angular/material';

    export class ModalComponent implements OnInit {
       constructor(public dialogRef: MdDialogRef<ModalComponent>) {}

       closeModal() {
           this.dialogRef.close(true); 
//pass data to this.dialogRef.close(yourData) to pass it for component where you open dialog
       }
    }

而且您可以轻松地对代码中的结果进行操作

dialogRef.afterClosed().subscribe(result => {
        if(result == true){
          return true;
        }else{
          return false;
        }

对不起,如果我不完全了解您。

答案 2 :(得分:0)

如果您为 angular mat-dialog-close 传递一个函数,它将始终在对话框打开时调用该函数。因此,不是函数调用,而是为 mat-dialog-close 分配一个属性。

答案 3 :(得分:0)

在你的组件中声明:

public subject = new Subject<boolean>();

您的默认功能是:

alteraDadosProduto(){ 
    this.subject.subscribe(response => {
       if(response == true){
          // Stuff you want to do...
       } else {
          // Stuff you want to do...
       }
    });
   this.verificaProdutoPossuIAnuncio();
}

你的对话功能:

verificaProdutoPossuIAnuncio(): void{
    if(this.produtosConfirmadosAnuncio[0].anuncio.length == 0){
      return true;
    }else{
      const dialogRef = this.dialog.open(DialogConfirmacaoAtualizacaoAnuncioComponent);
      dialogRef.afterClosed().subscribe(result => {
        this.subject.next(result);
    })
  }
}