Angular observable - 如何从订阅返回true或false到observable

时间:2018-05-21 05:14:20

标签: javascript angular observable ngx-bootstrap-modal

我有一个函数canDeactivate,应该返回truefalse。这可以通过调用openConfirmDialog()函数的结果来确定,该函数打开ngx-bootstrap模式'确认'对话框并等待用户响应(可以导致truefalse)。这是代码:

  canDeactivate(component: ComponentCanDeactivate): boolean | Observable<boolean> {
    // if there are no pending changes, just allow deactivation; else confirm first
    return component.canDeactivate() ?
      true :
      this.openConfirmDialog();
  }

  openConfirmDialog() {
    this.modalRef = this.modalService.show(ConfirmationComponent);
    return this.modalRef.content.onClose.subscribe(result => {
        console.log('results', result);
    })
  }

订阅result的{​​{1}}正在发挥作用。我可以成功记录this.modalRef.content.onClosetrue。当结果变为falsetrue时,我如何返回 falsetrue作为false的值?或者我错过了这一点,我应该以不同的方式做事吗?

我的canDeactivate看起来像这样,它将ConfirmationComponent定义为onClose(特别是Observable<boolean>),所以我可以成功返回一个布尔可观察对象,但我该怎么做每当Subject<boolean>收到canDeactivatetrue的值时,让false返回openConfirmDialogtrue

false

1 个答案:

答案 0 :(得分:1)

感谢@David我将我的订阅更改为onClose而不是map,而且这有效:

subscribe

然而,正如@Ingo Burk指出的那样,我可以简单地使用:

  openConfirmDialog() {
    this.modalRef = this.modalService.show(ConfirmationComponent);
    // line below - change from 'subscribe' to 'map'
    return this.modalRef.content.onClose.map(result => {
        return result;
    })
  }