如果过滤器在 rxjs 流中触发,则返回空数组

问题描述 投票:0回答:1

我有一个自动完成输入字段,它对用户输入做出反应并执行搜索功能。我设置了一个过滤器,以便仅在输入值包含两个以上字符时才开始搜索。由于我在

options$
循环中显示
*ngFor
,因此如果过滤器触发,我想返回一个空数组,因此下拉列表不会显示任何结果。

如果用户开始输入,这效果很好,但如果他们删除整个输入,则上次搜索的结果仍然可见。

所以基本上我想做的是,如果过滤器语句触发,则返回一个空数组。

public control = new FormControl()

this.options$ = this.control.valueChanges.pipe(
  debounceTime(300),
  distinctUntilChanged(),
  filter((val) => val.length > 2),
  switchMap((search) => this.filterFunc<T>(search))
);

我尝试引入另一个布尔值,它可以处理下拉列表的打开和关闭状态,但我认为必须有一种方法可以实现这一点,而无需强制设置值。

angular rxjs angular-forms
1个回答
0
投票

您实际上并不想过滤,因为如果长度小于 2,过滤器将阻止流发出任何值,但在这种情况下您确实想做一些事情(返回一个空数组)而不是实际过滤它.

因此您可以删除

filter
并在
switchMap
本身中处理此情况:

public control = new FormControl()

this.options$ = this.control.valueChanges.pipe(
  debounceTime(300),
  distinctUntilChanged(),
  switchMap((search) => search.length > 2 ? this.filterFunc<T>(search) : of([]))
);
© www.soinside.com 2019 - 2024. All rights reserved.