наблюдаемые, массивы и фильтрация - PullRequest
0 голосов
/ 06 июня 2019

с использованием угловых 8, rxjs 6.5.2

У меня есть вызов http, который возвращает наблюдаемое значение

{
  'A': {name: 'A', type:'1'},
  'B': {name: 'B', type:'2'},
  'C': {name: 'C', type:'2'}
}

Я сохраняю этот вызов в data$

Я хочу показать все типа "2" в угловой форме.Я знаю, что для преобразования объекта в массив я могу использовать Object.values(data)

, так как мне преобразовать наблюдаемое в массив, который затем можно отфильтровать и заменить обратно на наблюдаемое?

Я пробовал этот код

    this.myService.getPeople().subscribe(data => {
        const items = Object.values(data).filter(
            (item: any) => item && item.type === '2'
        );

        this.data$ = of(items);
    });

, но форма никогда не обновляется и не обновляется

Я что-то упускаю из виду?

Ответы [ 2 ]

1 голос
/ 06 июня 2019

Я предполагаю, что ваш компонент использует ChangeDetectionStrategy.OnPush.

В этом случае вам необходимо добавить ChangeDetectorRef к параметрам конструктора вашего компонента:

constructor(changeDetectorRef: ChangeDetectorRef, ...) {
...
}

затем измените вашу функцию извлечения данных на:

this.myService.getPeople().subscribe(data => {
            const items = Object.values(data).filter(
                (item: any) => item && item.type === '2'
            );
            this.data$ = of(items);
            this.changeDetectorRef.markForCheck();
        });
1 голос
/ 06 июня 2019

Вам нужно будет использовать оператор карты.

this.data$ = this.myService.getPeople().pipe(map(data => {
            const items = Object.values(data).filter(
                (item: any) => item && item.type === '2'
            );
              return items;
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...