Own observations are stateless. To track a value (or current value), you need to use either Subject, or BehaviorSubject.
In currentPlayerServicecreate BehaviorSubject, called playerBSubject:
export class CurrentPlayerService{
public playerBSubject: BehaviorSubject<any>;
constructor(){
this.playerBSubject = new BehaviorSubject({})
}
getPlayer(){
Observable.of({})
.subscribe((player)=>{
this.playerBSubject.next(player)
});
return this.playerBSubject.asObservable();
}
}
, .next() , , .asObservable().
, , , BehaviourSubject ( ), playerService.getPlayer(), .
this.route.params.subscribe(params => {
//check if BehaviorSubject exist or not
if (this.currentPlayerService.playerBSubject.getValue() === {}) {
this.playerService.getPlayer(params.id)
.subscribe((player) => {
this.currentPlayer = player;
this.currentPlayerService.setPlayer(player);
});
}
});
:
, , currentPlayerService playerService. currentPlayerService "" , , BehaviorSubject . .
export class PlayerService {
public playerBSubject: BehaviorSubject<any>;
constructor() {
this.playerBSubject = new BehaviorSubject({})
}
getPlayer(id) {
Observable.of({id})
.subscribe((player) => {
this.playerBSubject.next(player)
});
return this.playerBSubject.asObservable();
}
setPlayer(id) {
return Observable.of({id})
.subscribe(newPlayer => this.playerBSubject.next(newPlayer))
}
}
, , :
this.currentPlayer = this.playerService.playerBSubject.getValue();
asObservable :
this.playerService
.asObservable()
.subscribe(player => {
if (player === {}) {
this.route.params.subscribe(params => {
this.playerService.getPlayer(params.id);
})
}
this.currentPlayer = player
})