问题描述
谢谢您的帮助。 我试图与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
,它将返回一个承诺。