RxJs withLatestFrom / combineLatest:当什么都没有发出时,忽略第二个源

时间:2019-02-19 04:17:55

标签: angular rxjs

在Angular应用中,我正在寻找一种运算符/一种使用rxjs构建可观察对象的方法,但我不知道该怎么做。

我需要的是一个(相当简单的)过滤器功能,但是我无法使其工作。

源1是一个数组。 源2是一个文本框(用于过滤数组)。

this.source1 = of (['abc', 'aef', 'ahi', 'jkl', 'xyz']);
this.filterBox = new FormControl();

combineLatest(
      source1,
      this.filterBox.valueChanges,
      (items, filter) => {
        console.log(items, filter);
        return items.filter(item => item.includes(filter));
      }
    ).subscribe(val => console.log(val));

当filterBox为空并因此不发出任何东西时,这应该在开始时输出整个数组。

我尝试了CombineLatest,但文档显示:

  

只要每个源Observable发出了至少一个   项目

与withLatestFrom相同。

此处应使用什么运算符?

1 个答案:

答案 0 :(得分:3)

您可以使用startWith运算符为可观察值赋予初始值。 像这样:

combineLatest(
 source1,
 this.filterBox.valueChanges.pipe(startWith("")),
 (items, filter) => {
  console.log(items, filter);
  return items.filter(item => item.includes(filter));
 }
).subscribe(val => console.log(val));

从此处了解更多信息https://coryrylan.com/blog/subscribing-to-multiple-observables-in-angular-components