I have a Subject of Array of Users
private _currentHeroes = new Subject<Hero[]>();
currentHeroes = this._currentHeroes.asObservable();
- My goal is to edit only 1 element of the array without subscribing
Function of power up the user in my service
powerUp(id: number) {
return this.http
.post<Hero>(environment.apiUrl + 'heroes/powerUp/' + id, {})
.pipe(
tap((updatedHero: Hero) => {
this._currentHeroes.next(
// I would like to edit the specific element in the array and than sort them by the power.
);
})
);
}
Function of delete the user in my service
delete(id: number) {
return this.http.delete<Hero>(environment.apiUrl + 'heroes/' + id).pipe(
tap((deletedHero) => {
this._currentHeroes.next(
// Here I delete the specific element from the array
);
})
);
}
If the Subject was BehaviorSubject so I would do this:
powerUp(id: number) {
return this.http
.post<Hero>(environment.apiUrl + 'heroes/powerUp/' + id, {})
.pipe(
tap((updatedHero: Hero) => {
this._currentHeroes.next(
this._currentHeroes.value
.map((hero: Hero) =>
hero.id === updatedHero.id ? updatedHero : hero
)
.sort((a, b) => a.currentPower - b.currentPower)
);
})
);
}
delete(id: number) {
return this.http.delete<Hero>(environment.apiUrl + 'heroes/' + id).pipe(
tap((deletedHero) => {
this._currentHeroes.next(
this._currentHeroes.value.filter(
(hero: Hero) => hero.id !== deletedHero.id
)
);
})
);
}
But my goal is to achieve the same while using Subject instead of BehaviorSubject.
I tried getting the value of the subject but it's not possible since it's a Subject. I tried searching online but unfortunately, I didn't find any useful solution for my needs.
Does anyone encounter this issue? Or how to fix it?
I suppose you are working on a service, then you can have a reference of array you need to modify in service attr.
then, after every operation, you can modify that values and then emit with Subject or Behavior Subject or whatever you want to use.
Remember you have to subscribe to every operation that return an observable like you show in your code.