【发布时间】:2021-02-11 20:43:58
【问题描述】:
我有以下设置。搜索输入框效果很好。我现在已经添加了切换开关,我正在尝试了解如何使两者一起工作。
我已经为搜索词创建了一个 BehaviourSubject 和 Observable 组合,然后我正在观察 observable 以触发对象的过滤。
searchString = new BehaviorSubject("");
searchString$ = this.searchString.asObservable();
this.myForm.controls.searchString.valueChanges.pipe(
debounceTime(400),
distinctUntilChanged(),
tap((val) => this.searchString.next(val))
).subscribe()
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
);
};
这很好用。现在,我使用 formcontrolname 和 Valuechanges observable 设置了切换
this.myForm.controls.isActive.valueChanges.pipe(
tap( val => this.userIsActive = val)
).subscribe()
这会切换 userIsActive。在filteredUserNames 我有一个属性isActive: boolean
同时按 searchTerm 和 isActive 状态过滤过滤后的UserNames 对象的最佳方法是什么?
编辑: 用户对象如下所示
{id: 52, firstName: "Administrator", lastName: "Account", employeeId: null, jobTitle: "Learning Administrator", isActive: false …}
filteredUserNames 列表用作模板中的 *ngFor。
<div (click)="selectUser(userName)"
*ngFor="let userName of filteredUserNames">
{{userName.title}}
etc...
</div
我需要同时使用过滤器 isActive 和 SearchTerm 来过滤列表。因此,如果将非活动切换为 false,则搜索框将仅搜索非活动列表,如果将其切换为 true,则搜索框将搜索整个原始列表。
【问题讨论】:
标签: angular rxjs angular-reactive-forms