angular - Tillämpa filter på en Observable
Hur kan vi tillämpa ett filter på en Observable så att vi kan få data baserat på någon viss villkor? Mitt krav är att jag vill filtrera ut användarna från userObservable vars status är "Approved".
Nedan är min http-tjänstmetod.
getUserList(){
return this.httpClient.get<UserModel[]>(environment.userListUrl);
}
Nedan är UserModel
export class UserModel{
userName: string;
userStatus: string;
}
Och detta är vad jag försöker göra men är inte säker på hur jag kan tillämpa ett filter så att jag kan få de användare vars userStatus är "Approved"
const userObservable$: Observable<UserModel[]>=this.userService.getUserList(this.cmpnyId);
observable$.pipe(filter(....<Need help here>));
Svar #1
Du kan använda det i tjänsten för att hålla affärslogiken i tjänsterna.
Kodexempel:
enum Status{
approved = 'Approved'
}
getUserList(){
return this.httpClient.get<UserModel[]>(environment.userListUrl)
.pipe(
map(users =>
users.filter(user =>
user.userStatus == Status.approved))
}
Observera, vänligen använd Enum för något liknande detta för att göra det lättare för framtida statusförändringar.
Svar #2
Kolla RxJS-dokumentationen om map-operatören:
filteredObservable$ = userObservable$.pipe(
map(users => users.filter(user => user.userStatus == "Approved"))
)
Du bör mappa värdet av Observable till en ny filtrerad array. filter-operatorn som du använder kan endast användas för att tillåta eller kasta bort värden som sänds ut av Observable, den är inte relaterad till .filter-arrayfunktionen, som filtrerar vissa element ur en array.
