所以我在这里要做的是根据另一个可观察的条件有条件地使用startWith。
我尝试了mergeMap而不是map,并用'of'包裹了返回值,但是没有用。
fromEvent(element.nativeElement,'click').pipe(
withLatestFrom(this.isMobileView$),
map(([event, isMobileView]) => {
if (isMobileView) {
// do some stuff
return false;
} else {
// do some other stuff
// return a boolean variable
return this._drawer.opened;
}// TODO: else if nativescript
}),
//here I want to use 'isMobileView' inside my startWith
// something like startWith(!isMobileView)
startWith(true),
);
期望可观察的流从移动视图开始时为false,否则为true。
答案 0 :(得分:1)
您可以这样定义它:
this.isMobileView$.pipe(switchMap(isMobileView =>
fromEvent(element.nativeElement,'click').pipe(
map((event) => {
if (isMobileView) {
// do some stuff
return false;
} else {
// do some other stuff
// return a boolean variable
return this._drawer.opened;
}
}),
startWith(!isMobileView)
)));
您最终将取消先前的点击订阅,并在每次isMobileView $发出时重新订阅,这没什么大不了的。