/ / Angular 2 filter a Observabble <obiekt []> - kątowy, rxjs

Angular 2 filtruje Observabble <object []> - angleular, rxjs

Chcę wyświetlić listę IMessage na ekranie i można je filtrować za pomocą Pipe. Wiadomość jest w rzeczywistości Observable<IMessage[]> na których chcę filtrować każdy IMessage sprawdzając jego isPrivate własność. Kod MessageStatusPipe wygląda tak:

export class MessageStatusPipe {
transform(message: Observable<IMessage[]>, privateFilter: bool) {


//Here I want to return the Messages which the pass the privateFilter, but how?

}
}

Czytałem kilka pytań, które wydają się bardzo podobne, ale wydaje mi się, że nie potrafię zastosować tego rozwiązania. Poniższe rozwiązanie Luka Jacobowitz wydaje mi się dokładnie tym, czego potrzebuję. https://stackoverflow.com/questions/37991713/simple-filter-on-array-of-rxjs-observable#=

============ Zaktualizuj za pomocą odpowiedzi =============

Jak zauważył Meir, rura zwróciła wartość bool zamiast tablicy podrzędnej zawierającej elementy pasujące do filtra. Moja działająca rura wygląda teraz tak:

export class MessageStatusPipe {
transform(messages: Observable<IMessage[]>, privateFilter: bool) {
return messages.map(m => m.filter((message, i) => {
return message.isPrivate == privateFilter;
}));
}
}

Odpowiedzi:

0 dla odpowiedzi № 1

Twoje działanie można (należy) podzielić na 2 części: 1. Uzyskiwanie wartości asynchronicznych 2. Filtrowanie ich

Możesz więc zmienić podpis rury na:

transform(messages: IMessage[], privateFilter: bool) { ... }

A w swoim komponencie:

<div *ngFor="let msg of messages | async | messageStatusPipe">...</div>

Jeśli z jakiegoś powodu chcesz połączyć je w jedną rurę, możesz rzucić okiem na artykuł napisałem który pokazuje jak radzić sobie z wartościami asynchronicznymi wewnątrz potoku i dostosować go do twoich potrzeb (głównie, dodaj swoje logowanie filtrowania)

============ dodana logika filtra ==============

return messages.filter(privateFilter);