Ich benutze andere Module, so dass es in lazy geladenen Modulen verwendet werden kann. Hier ist meine Servicedatei.Ich möchte rxjs Betreff verwenden, um die Wertänderung in mehreren Komponenten zu erkennen. Aber es zeigt nur Änderungen in der Komponente, die es ändert
import {NgModule, Injectable } from '@angular/core'
import {Subject} from 'rxjs/Subject';
@Injectable()
export class ChangeEventService {
public invokeEvent:Subject<any> = new Subject();
// localId:any = { name:'', eventId:0, orgId:0};
constructor() {
}
public callComponent(currentId:any):void {
console.log("Invoked");
this.invokeEvent.next({localId:currentId});
}
}
@NgModule({
imports: [ ],
exports : [
],
providers: [ ChangeEventService ],
})
export class ChangeEventModule { }
Abonnement Rxjs Gegenstand verändert sich nur in der Komponente/Dienst, die Sie verändert.
export class xyz {
constructor(private change: ChangeEventService) {
this.change.invokeEvent.subscribe((value) => {
this.event = value.localId;
console.log("I'm chnaged...!!");
});
}
anyFunction(eventdata:any) {
this.change.callComponent(eventdata);
}
}
ich die einzige aktualisierte Wert in der Komponente, die den Wert von InvokeEvent ändern.
Können Sie überprüfen, wie oft der Konstruktor ausgeführt wird. Sie haben möglicherweise mehrere Instanzen des 'ChangeEventService'. – Philipp
ist 'this.change.invokeEvent.callComponent (eventdata);' Angenommen, 'this.change.callComponent (eventdata);' – shusson
@shusson: +1. Sind Sie sicher, dass 'ChangeEventService' ein Singleton ist? Wird es in 'NgModule.providers 'eines Moduls deklariert, das ** eifrig geladen ** ist (vs lazily-loaded)? – AngularChef