RxJS筛选器/搜索主题,可观察对象或BehaviorSubject

时间:2018-10-09 17:53:15

标签: javascript rxjs

我刚刚开始学习RxJS。我没有太多运气试图做的一件事是,弄清楚如何搜索/过滤主题,或者创建一个可以观察的数组。

我尝试了管道传输和过滤Subject和BehaviorSubject,但是谓词中的值是RxJS特定的。 根据我在各种文章中所读到的内容,方法是观察数组以使用Subject。

我可以轻松地拥有两个变量,一个数组和主题,然后搜索该数组。但是我想完成这个变量。

在淘汰赛中可以搜索观察到的阵列。

在RxJS中有可能吗?

谢谢。

示例:

layers: Rx.Subject<any> = new Rx.Subject<any>();

toggleLayer (layerId, visible) {

  //find layer we need to toggle

 // How do I search the subject to get the values added in next()?

   // tried from(this.layers), pipe does not fire
    const source = of(this.layers);

    const example = source.pipe(filter((val, index) => {
   //val is subject, and only iterates once, even if more than one value in subject
      // tslint:disable-next-line:no-debugger
      debugger;
      return false;
    }));

    const sub = example.subscribe((val) => {
      // tslint:disable-next-line:no-debugger
      debugger;
    });

}

private addLayer = (layerName, layerObj, layerType) => {

  // component class is subscribed to layers subject. Update UI when layer is added
  this.layers.next({
      layerId: this.layerId,
      name: `${layerName}_${this.layerId}`,
      layerObj: layerObj,
      visible: true,
      layerType: layerType
    });

}

1 个答案:

答案 0 :(得分:0)

我不清楚您要问的细节,但也许这个例子对您有帮助。

const filterSubject = new BehaviorSubject<string>('b');
const dataSubject = new BehaviorSubject<string[]>(['foo', 'bar', 'baz', 'bat']);
const dataObservable = combineLatest(filterSubject, dataSubject).pipe(
  // given an array of values in the order the observables were presented
  map(([filterVal, data]) => data.filter(d => d.indexOf(filterVal) >= 0))
);

dataObservable.subscribe(arr => console.log(arr.join(',')));
// bar, baz, bat

使用combineLatest,只要过滤器值或数据数组发生更改,就可以更新dataObservable中的值。