Применение фильтра к наблюдаемой - PullRequest
0 голосов
/ 10 апреля 2020

Как мы можем применить фильтр к Observable , чтобы мы могли получать данные на основе некоторого условия? Мое требование - я хочу отфильтровать пользователей из userObservable , чей статус " Approved ".

Ниже приведен мой http-метод обслуживания.

getUserList(){
    return this.httpClient.get<UserModel[]>(environment.userListUrl);
}

Ниже приведен UserModel

export class UserModel{
   userName: string;
   userStatus: string;
}

И это то, что я пытаюсь сделать, но не уверен, как я могу применить фильтр, чтобы я мог получить пользователей, чьи userStatus есть " Одобрен"

const userObservable$: Observable<UserModel[]>=this.userService.getUserList(this.cmpnyId);
observable$.pipe(filter(....<Need help here>));

Ответы [ 2 ]

3 голосов
/ 10 апреля 2020

Вы можете использовать его в сервисе, чтобы сохранить бизнес-логику c в сервисах.

Пример кода:

enum Status{
    approved = 'Approved'
}

getUserList(){
    return this.httpClient.get<UserModel[]>(environment.userListUrl)
   .pipe(map(users => users.filter(user => user.userStatus == Status.approved))
}

Обратите внимание, используйте Enum для чего-то подобного чтобы вы могли упростить будущие изменения статуса.

1 голос
/ 10 апреля 2020

Проверьте документацию Rx JS на операторе map :

filteredObservable$ = userObservable$.pipe(
  map(users => users.filter(user => user.userStatus == "Approved"))
)

Необходимо сопоставить значение Observable с новым фильтрованным массивом. Оператор filter, который вы используете, может использоваться только для разрешения или отбрасывания значений, генерируемых Observable, он не связан с функцией массива .filter, которая фильтрует определенные элементы из массива.

...