具有异步可观测的Angular2 CanDeactivate

具有异步可观测的Angular2 CanDeactivate,angular,observable,angular-routing,angular2-observables,angular2-guards,Angular,Observable,Angular Routing,Angular2 Observables,Angular2 Guards,我正在调查警卫,试图阻止CanDeactivate的导航。我想用Save/Cancel,Save=navigate和well,Cancel=Cancel来显示一个简单的模式 我已经让CanDeactivate工作了,但它似乎没有在正确的时间解决 卫兵 canDeactivate(component: PortfolioModelComponent) { component.saveChanges(); // Opens modal return component.modalRe

我正在调查警卫,试图阻止CanDeactivate的导航。我想用Save/Cancel,Save=navigate和well,Cancel=Cancel来显示一个简单的模式

我已经让CanDeactivate工作了,但它似乎没有在正确的时间解决

卫兵

canDeactivate(component: PortfolioModelComponent) {
    component.saveChanges(); // Opens modal
    return component.modalResponse.take(1); // isnt happening at the right time
}
组件技术

 public modalResponse: Observable<boolean> = new Observable((observer) => { });

public saveChanges() {
    this.openSaveChangeModal();
}

// Modal save changes
public openSaveChangeModal() {
    $('#savePortfolioChangesModal').modal();
}

public closeSaveChangesModal() {
     this.modalResponse = new Observable((observer) => {
        observer.next(false);
    });
    $('#savePortfolioChangesModal').modal('hide');
}

public saveSaveChangesModal() {
    this.modalResponse = new Observable((observer) => {
        observer.next(true);
    });
    $('#savePortfolioChangesModal').modal('hide');
}
publicmodalresponse:Observable=新的Observable((observator)=>{});
公共存储更改(){
这个参数为.opensavechangemodel();
}
//模式保存更改
公共openSaveChangeModal(){
$('#savePortfolioChangesModal').modal();
}
public closeSaveChangesModal(){
this.modalResponse=新的可观察对象((观察者)=>{
观察者:下一个(假);
});
$('#savePortfolioChangesModal').modal('hide');
}
公共savechangesmodal(){
this.modalResponse=新的可观察对象((观察者)=>{
观察者:下一个(正确);
});
$('#savePortfolioChangesModal').modal('hide');
}
在第一次“保存”时,一旦显示模式,就不会发生任何事情。 在第二次“保存”时,导航将在我回答模态之前进行。
如何在正确的时间解决问题?

您应该在
saveChanges()
方法中返回
modalResponse