typescript - Angular 2 | Abonarea la Observabile
Încerc să fac ca 2 componente să comunice între ele folosind un intermediar (Serviciu).
Am o aplicație asemănătoare cu Photoshop și vreau un component (o fereastră cu un buton) pentru a adăuga un strat în 'imageView'-ul meu.
ambele sunt cuplate în alte vizualizări, așa că nu pot folosi '@Output'.
Declanșatoarele butonului:
addLayer() {
this._broadcastService.addLayer(0);
}
Componentă receptoare:
constructor(private _broadcastService:BroadcastService) { }
ngOnInit() {
this.subscription = this._broadcastService.layer$.subscribe(
data => this.test(data))
}
Serviciu de difuzare:
private _layerSubject = new BehaviorSubject<number>(0);
layer$ = this._layerSubject.asObservable();
addLayer(data: number) {
this._layerSubject.next(data);
}
Componenta de recepție nu primește nimic. Nu se declanșează, doar o dată la pornire, vreau să declanșez ceva de fiecare dată când apăs butonul de adăugare strat.
mulțumesc!
Răspuns #1
Trebuie să furnizați BroadcastService o singură dată pe un component părinte comun, precum
@Component({
selector: '...',
provide: [BroadcastService],
})
class AppComponent {}
Pentru a partaja aceeași instanță cu întreaga aplicație, oferiți-o la componenta rădăcină, care este părintele comun al tuturor componentelor și directivelor din aplicația dvs. Angular2. (alternativ, o puteți oferi la bootstrap(AppComponent, [BroadcastService]))
Dacă îl furnizați la alte componente, această componentă și copiii săi vor primi o instanță diferită a serviciului.
