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

sh7euo9m  于 2023-04-22  发布在  TypeScript
关注(0)|答案(5)|浏览(141)

在我的函数的确定时刻,我打开了一个材料对话框,我需要等待对话框的回答才能继续我的函数,但在我选择确认对话框之前,函数正在运行。
我试着做些事情:
我的默认函数:

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功能?谢谢

mqxuamgl

mqxuamgl2#

Sory cant writte commnet(low rep).我不完全理解你.但是如果你需要在对话框关闭后将数据传递给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;
        }

对不起,如果我不完全理解你。

az31mfrm

az31mfrm3#

如果你为angular mat-dialog-close传递一个函数,它总是会在对话框打开时调用该函数。因此,代替函数调用,为mat-dialog-close分配一个属性。

nkcskrwz

nkcskrwz4#

在你的组件中声明:

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

y1aodyip5#

你可以从rxjs使用lastValueFrom

import { lastValueFrom } from 'rxjs';

let dialogRef = this.dialog.open(DialogConfirmacaoAtualizacaoAnuncioComponent);
let dialogResult = await lastValueFrom(dialogRef.afterClosed());
if (dialogResult ) {
   ...
}

相关问题