在我的canDeactivate()路线保护中,我正在调用一个有两个按钮的模态:ok和cancel。如果单击确定按钮以便用户可以继续离开页面,我想返回true,如果单击取消按钮则返回false。这是我目前的代码:
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;
}
最初测试时,我只有一个observable来检查ok按钮何时被调用,然后订阅它,然后返回结果。这有效,但它只适用于一个按钮,每当点击取消按钮时,这就打破了一切。这是我最初只用一个按钮就能完美运作的。
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一起使用时,我做错了什么,我该怎么办?
答案 0 :(得分:4)
CombineLatest将等待两个observable都发出一个值。这种情况从未发生过。您想要jobPool
。
Observable.merge
或
return okResult.merge(cancelResult).take(1)