我想过滤从API获得的名称列表。我想使用过滤器运算符来执行此操作。但我收到此错误:
> Property filter is not available for type Observable<any>
尽管导入
import { map, filter } from 'rxjs/operators';
我以Josh Morony的本教程为指导:https://www.joshmorony.com/high-performance-list-filtering-in-ionic-2/
我的代码:
service.ts
getList(): Observable<any> {
return this.http.get(this.url);
}
page.ts
public searchTerm: string = "";
userList: Observable<any>;
ngOnInit() {
this.getAllUsers();
}
getAllUsers() {
this.userList = this.userService.getList()
.pipe(map(response => response.results));
}
filterUsers (searchTerm) {
return this.userList.filter (user => {
return user.username.toLowerCase().indexOf(searchTerm.toLowerCase()) > -1;
});
}
SearchList() {
this.userList = this.filterUsers (this.searchTerm);
}
page.html
<ion-searchbar mode="ios" class="items-searchbar" animated mode="ios" [(ngModel)]="searchTerm" (ionChange)="searchList()" placeholder="Filter by name..."></ion-searchbar>
答案 0 :(得分:3)
RxJS的filter运算符和JavaScript的Array.filter()之间有区别。
RxJS svg {
display: inline-block;
width: auto;
height: 40px;
}
运算符从满足特定条件的流中排除可观察到的东西,而filter
根据特定条件从数组中过滤/删除对象或值
就您的问题而言,在过滤返回的可观察值之前,您需要预订Array.filter()
可观察值。此时,您可以返回过滤后的结果,该结果将用于userList
方法。
SearchList
答案 1 :(得分:1)
在map()之后,您必须在pipe()内部使用过滤器