Angular 9,如何从NgbModal返回值将值返回到canDeactivate

问题描述

谢谢您的帮助。 我试图与NgbModal一起使用canDeactivate函数。 这意味着我要返回的值取决于NgbModal的返回。

我已经看到它与comfirm alert一起工作,但是它与NgbModal无关。 这是我的代码, console.log(rtn)打印“未定义”。我知道为什么,但是不知道如何将NgbModal连接到canDeactive()。救救我吧!

  public canDeactivate() { 
    //return confirm("Do you really want to leave?")
    const rtn = this.ExistFromExamModal(this.exitFromExamMd)
    console.log(rtn)
    return rtn
  }

  public ExistFromExamModal(content: any): any {
    this.modalService
      .open(content,{
        centered: true,scrollable: true,windowClass: 'final-confirm',})
      .result.then((result) => {
        if (result === 'yes') {
          return true
        } else {
          return false
        }
      })
  }

解决方法

您将需要返回一个可观察的

  public canDeactivate() { 
    return from(
      this.modalService
        .open(this.exitFromExamMd,{
          centered: true,scrollable: true,windowClass: 'final-confirm',}).result
    ).pipe(
      map(result => result === 'yes')
    );
  }

from将promise变成可观察的,并且map函数将yes | no字符串转换为布尔值。

编辑: 实际上,您可以使ExistFromExamModal函数返回一个Promise。目前它什么也不会返回,但是如果您在return之前this.modalService,它将返回一个承诺。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...