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.