angular - Kako mogu ispisati vrijednost observable-a u konzolu?
Koristim Angular 2 i RxJS, i pitam se kako mogu napraviti sljedeće:
U svojoj komponenti definirao sam sljedeće:
count: Observable<number>;U konstruktoru moje komponente radim sljedeće:
constructor(
private store: Store<any>
) {
this.count = this.store.select<any>(state => state.count);
}
Kako mogu vidjeti trenutačnu vrijednost za count? Trenutno, ako napravim console.log(this.count), dobijem veliki objekt za ispis. Ako želim vidjeti samo vrijednost za this.count, kako to mogu učiniti?
Odgovor #1
S običnim observableom dobivate vrijednost samo kada se promijeni, pa ako želite ispisati vrijednost u konzolu, trebate je ispisati unutar pretplate:
constructor(
private store: Store<any>
) {
this.count = this.store.select<any>(state => state.count);
this.count.subscribe(res => console.log(res));
}
Međutim, ako želite moći dobiti trenutačnu vrijednost u bilo kojem trenutku, ono što ćete htjeti je BehaviorSubject (koji kombinira Observable i Observer u funkciji... uvezite ga iz rxjs biblioteke kao što to činite s Observable).
private count:BehaviorSubject<number> = new BehaviorSubject<number>(0);
constructor(
private store: Store<any>
) {
let self = this;
self.store.select<any>(state => self.count.next(state.count));
}
Onda, svaki put kada želite dobiti trenutnu vrijednost brojača, pozvali biste this.count.getValue(), a za promjenu vrijednosti pozvali biste this.count.next(<vrijednost koju želite unijeti>). To bi vam trebalo dati ono što tražite.
Odgovor #2
S novijim verzijama RxJS-a (koliko se sjećam, počevši od 6.0) ispravan način je koristiti .pipe(). A da odgovorim na tvoje pitanje, treba ti tap operator.
constructor(
private store: Store<any>
) {
this.count = this.store.select<any>(state => state.count).pipe(
tap(countValue => console.log('Count: ', countValue))
);
}
