angular - Angular 多重过滤 Observable,rxJS
问题描述
您好,我想使用 3x 过滤器输入(1x input:text, 2x select)
。我有一个 Observable list userList$: Observable<User[]>
。在ngOnInit()
我过滤这个列表中使用我的input:text
.
userList$: Observable<User[]>
inputControl = new FormControl(); // input type text
selectStatus = new FormControl(); // select
filteredData$:any;
ngOnInit(){
this.filteredData$ = combineLatest(
this.userList$,
this.inputControl.valueChanges.pipe(
startWith(""),
debounceTime(400)
)
).pipe(
distinctUntilChanged(),
filter(([list, input]) => Boolean(list)),
map(([list, input]) => {
return list.filter(
({login}) => !input || login.toLowerCase().indexOf(input) !== -1);
})
);
this.userList$ = this.filteredData$;
}
当我再添加一个过滤器时,第一个过滤器不起作用..当我使用 2x 过滤时的代码:
ngOnInit(){
this.filteredData$ = combineLatest(
this.userList$,
this.inputControl.valueChanges.pipe(
startWith(""),
debounceTime(400)
)
).pipe(
distinctUntilChanged(),
filter(([list, input]) => Boolean(list)),
map(([list, input]) => {
return list.filter(
({login}) => !input || login.toLowerCase().indexOf(input) !== -1);
})
);
this.filteredData$ = combineLatest(
this.userList$,
this.selectStatus.valueChanges.pipe(
startWith(""),
debounceTime(400)
)
).pipe(
distinctUntilChanged(),
filter(([list, input]) => Boolean(list)),
map(([list, input]) => {
if(input == 1){
return list.filter(
({is_banned, is_deleted}) => is_banned !== 1 || is_deleted !== 1);
}else if (input == 2){
return list.filter(({is_banned}) => is_banned == 1 );
}else{
return list.filter(({is_deleted}) => is_deleted == 1 );
}
})
);
this.userList$ = this.filteredData$;
}
使用 3x 过滤器字段时如何过滤此列表?
解决方案
推荐阅读
- c# - 使用 where 子句获取数据
- java - SQLGrammarException:尝试从数据库中删除时无法执行语句
- java - 录制后清空文件并在 1-2 秒后关闭移动设备
- c - pset3 复数 - 候选人投票未更新 - CS50
- c++ - 将最新的 Visual Studio 安装到 Windows 7 - 安装程序退出且没有错误或警告
- python - 使用 Python 重叠 2 个 RGBA 图像
- python - 求解线性方程组时的断言错误
- c# - 如何获取用户完成的登录和注销次数?
- laravel - laravel 5 搜索相关模型
- arrays - 如何将范围选择从 4 减少到 2 以创建图表 VBA?