/ / Manipulácia s dvoma pozorovateľnými údajmi v canDeactivate - uhlové, strojové, pozorovateľné

Manipulácia s dvoma pozorovateľmi v canDeactivate - uhlová, strojopisná, pozorovateľná

Vo svojom strážcovi trasy canDeactivate () volám amodal, ktorý má dve tlačidlá: ok a zrušiť. Chcem sa vrátiť, ak kliknete na tlačidlo OK, takže používateľ môže pokračovať v odchode zo stránky a vráti sa k falošu, ak klikne na tlačidlo Zrušiť. Tu je môj aktuálny kód:

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;
}

Spočiatku, keď som to skúšal, mal som lenjeden pozorovateľný pre kontrolu, keď sa zavolá tlačidlo ok, a potom sa k tomu prihlási a vráti výsledok. Toto fungovalo, ale fungovalo len pre jedno tlačidlo a vždy, keď kliknete na tlačidlo Zrušiť, toto všetko rozbilo. Tu je to, čo som mal pôvodne, že pracoval perfektne len pre jedno tlačidlo.

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;
}

Čo robím zle, keď sa snažím, aby moja canDeactivate modal pracovať s viac ako jedným pozorovateľným a čo mám robiť?

odpovede:

4 pre odpoveď č. 1

CombineLatest bude čakať, kým obidva pozorovateľné hodnoty vydajú hodnotu. To sa nikdy nestane pre váš prípad. Chceš Observable.merge miesto.

return okResult.merge(cancelResult).take(1)

alebo

return Observable.merge(okResult, cancelResult).take(1)