I want to subscript to an observable that has a filtered value, but the filtering part isn't working.
In my service, I have
export class UserService {
private userList: user[];
public userList$ = new BehaviorSubject<user[]>([]);
constructor() {
this.userList = [
{
name : "ben",
isActive : true,
},
{
name : "chen",
isActive : true,
},
{
name : "Ray",
isActive : true,
},
{
name : "GuanJiaHong",
isActive : true,
},
{
name : "Maoge",
isActive : true,
},
];
this.userList$.next(this.userList);
}
getActiveUsers(): Observable<user[]> {
return this.userList$.asObservable().pipe(map(user => user.filter(x => x.isActive == true)));
}
setToInactive(user: user) {
const currentUser = this.userList.find(x => x == user);
if(currentUser != undefined) {
currentUser.isActive = false;
}
}
}
and in my component, I have
export class ActiveUsersComponent implements OnInit {
activeUser$: Observable<user[]> = new Observable();
constructor(private userService: UserService) { }
ngOnInit(): void {
this.activeUser$ = this.userService.getActiveUsers();
}
setInactive(user: user) {
this.userService.setToInactive(user);
}
}
In my activeUser template, I have
Active User:<br>
<div *ngFor="let user of activeUser$ | async">
{{user.name}} <button (click)="setInactive(user)">inactive</button><br>
</div>
when I set a user to inactive, this.activeUser$ should be filtered with only active user and the template should only be showing the active user, but it's still showing all the user including inactive user, I wonder what's wrong with my Observable implementation? Thank you.