1
在我的canDeactivate()路徑守衛中,我調用了一個有兩個按鈕的模式:ok和cancel。如果點擊ok按鈕,我想返回true,以便用戶可以繼續離開頁面,如果點擊取消按鈕,則返回false。這裏是我當前的代碼:在canDeactivate中處理兩個可觀察對象
canDeactivate(component: ComponentCanDeactivate): boolean | Observable<boolean> {
let can = component.canDeactivate();
//let result = new Observable<boolean>();
let okResult = new Observable<boolean>();
let cancelResult = new Observable<boolean>();
if (!can) {
component.myChangesModal.show('Warning', 'You are about to leave this page with unsaved changes.');
okResult = component.myChangesModal.okEvent.map(() => true);
//okResult.subscribe();
cancelResult = component.myChangesModal.cancelEvent.map(() => false);
//cancelResult.subscribe();
console.log(okResult);
console.log(cancelResult);
const observablesArray = [okResult, cancelResult];
let result = Observable.combineLatest.apply(this, observablesArray).take(1);
result.subscribe();
return result;
}
return true;
}
最初測試了這一點的時候,我只有一個單一的觀察到的,檢查時確定按鈕被調用,然後將訂閱的,並返回結果。這工作,但它只適用於一個按鈕,每當點擊取消按鈕,這打破了一切。這是我最初的工作,只有一個按鈕完美。
canDeactivate(component: ComponentCanDeactivate): boolean | Observable<boolean> {
let can = component.canDeactivate();
let result = new Observable<boolean>();
if (!can) {
component.myChangesModal.show('Warning', 'You are about to leave this page with unsaved changes.');
result = component.myChangesModal.okEvent.map(() => true);
result.subscribe();
return result;
}
return true;
}
當我試圖讓我的canDeactivate模式與多個observable一起工作時,我該做什麼錯誤,我應該怎麼做?
'merge'將在這裏工作,也有'Observable.race',其行爲在這種情況下非常相似。 –