rxjs条件startWith

时间:2019-05-02 22:10:44

标签: angular typescript rxjs

所以我在这里要做的是根据另一个可观察的条件有条件地使用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。

1 个答案:

答案 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 $发出时重新订阅,这没什么大不了的。