我有一个名为filteredUserNames的列表,其中包含了很多用户。每次更改表单上的值时,它都会启动数据的新筛选器。我知道为了延迟时间,这样不是每个字符都会触发一个新的筛选器,我需要使用减法,但我不知道该在哪里添加它。它应该在值更改订阅中吗?另外,实现它的正确方法是什么?
我有过
searchString = new BehaviorSubject("");
searchString$ = this.searchString.asObservable();在构造器中
this.myForm = this.fb.group({
searchString: [""],
});
this.myForm.controls.searchString.valueChanges.subscribe((val) => {
// SHOULD THE DEBOUNCE GO HERE ?? //
this.searchString.next(val);
}在ngOnInit中
this.searchString$.subscribe((searchTerm) => {
console.log(this.userNames);
if (this.userNames !== undefined) {
this.filteredUserNames = this.userNames.filter(
(userName) =>
userName.searchTerms
.toLowerCase()
.indexOf(searchTerm.toLowerCase()) !== -1
);
};
});发布于 2020-10-16 09:28:17
尝试这样做,您可以添加distinctUntilChanged来忽略类似的值,并为您的副作用添加点击操作符,在您的情况下,这将向behaviorSubject发出一个新的值。
import { tap, distinctUntilChanged, debounceTime} from 'rxjs/operators';
...
this.myForm.controls.searchString.valueChanges.pipe(
debounceTime(400),
distinctUntilChanged(),
tap((val) => this.searchString.next(val))
).subscribe()https://stackoverflow.com/questions/64386427
复制相似问题