Próbuję utworzyć własną usługę obserwowalną, ale po otrzymaniu początkowych danych z usługi wszelkie aktualizacje usługi nie są propagowane do żadnych subskrybentów. Usługa wygląda następująco:Usługa Angular2 Observable BehaviorSubject nie działa
import { Injectable } from '@angular/core';
import { Observable, BehaviorSubject } from 'rxjs/Rx';
@Injectable()
export class DataService {
keys : number[] = [4,5,1,3,2];
private data :BehaviorSubject<number[]> = new BehaviorSubject(this.keys);
constructor() {};
public setKey(i:number, val:number) :void {
this.keys[i]=val;
this.data.next(this.keys);
}
public getData() :Observable<number[]> {
return new Observable(fn => this.data.subscribe(fn));
}
public getKeys() :number[] {
return this.keys;
}
}
składnik korzystający z usługi dostaje dane początkowe dobrze. ten komponent pobiera swoje dane w konstruktorze:
constructor(public dataService: DataService) {
dataService.getData().subscribe(data => {
console.log("Gotcha!");
this.data.datasets[0].data = data)
});
};
co daje jeden komunikat Gotcha w logu konsoli. Ale po aktualizacji danych z setKey (2,3) gdzie indziej, oczekiwałem, że this.data.next (this.keys); wysyłanie danych do wszystkich subskrybentów, a dane będą aktualizowane odpowiednio w tym komponencie. ale żadne dane nie są wysyłane do subskrybentów.
Myślałem, że wymyśliłem obserwowalne, ale proszę nie bądź przyjazny, jeśli brakuje mi tu punktu;) wszelkie wskazówki we właściwym kierunku będą bardzo mile widziane!
Wygląda na to, że usługa jest świadczona więcej niż jeden raz, co prowadzi do różnych składników, w których występują różne wystąpienia. –
Jakie powinno być podejście do pracy w modułach. Mam podobną usługę. Niektóre z moich komponentów (w różnych modułach) subskrybują się w obserwowalnej usłudze uwierzytelniania i odbierają dane po zmianie, ale inne nie otrzymują danych. Na przykład. kiedy mój komponent logowania (btn) emituje następny element na obserwatorze, komponenty logowania widzą zmianę, ale moje komponenty nagłówka i paska bocznego nie są, gdy są one również subskrybowane, myślę, że ma to związek z leniwym ładowaniem lub z pamięcią podręczną lub niektórymi rodzic dziecko problem .. pff – webmaster
@ GünterZöchbauer dzięki za to! Dostarczałem tę usługę zarówno w ramach komponentu, jak i modułu nadrzędnego. To doprowadzało mnie do szaleństwa! – jminuscula