尽管已导入

时间:2019-11-04 16:12:56

标签: javascript angular typescript ionic-framework rxjs

我想过滤从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>

2 个答案:

答案 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()内部使用过滤器