Фильтр rxjs6 Наблюдаемый - PullRequest
       17

Фильтр rxjs6 Наблюдаемый

0 голосов
/ 14 октября 2018

У меня есть наблюдаемый массив angularFirestore внутри users.service.ts:

$users: Observable<Array<any>>;
constructor()
{
    this.$users = this.angularFirestore.collection('users').valueChanges();
}

Это класс объекта:

class User
{
    name: string;
    status: boolean;
    index: number;
}

Мне нужно фильтровать по нескольким полям, но как-тоиспользование следующего кода в users.component.ts не подписывает никаких результатов:

users: Users[];
ngOnInit()
{
    this.usersService.$users.pipe
    (filter((user: User) => user.name == 'some value'))
    .subscribe((users: User[]) =>
    {
        this.users = users;
    });
}

Моя конечная цель - иметь возможность фильтрации, включающей строку поиска user.name и пользователя.status == true и исключить остальные недействительные результаты.

Я хотел бы сделать это без каналов.Буду признателен за любую помощь в исправлении и улучшении существующего кода для достижения вышеуказанного.Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

Не совсем уверен, что ваша проблема с .pipe.Но вы также можете сделать это, как только вы получите свой массив внутри .subscribe

users: Users[];
ngOnInit() {
  this.usersService.$users
    .subscribe((users: User[]) => {
      this.users = users.filter(user => user.status && user.name === 'some value')
    });
}

Кстати, это НЕ ошибка , как упомянуто kunwar97 .Это единственный способ применить операторы к Observables в Rxjs6.

0 голосов
/ 14 октября 2018

Это известная проблема в Angular 6. Пожалуйста, перейдите по этой ссылке.https://github.com/angular/angularfire2/issues/1748

Установка rxjs-compact решит вашу проблему

npm install rxjs@6 rxjs-compat@6 --save
...