J'ai l'objet de configuration suivant qui est défini avant l'exécution du constructeur:
config: Object = {
onSlideChangeEnd : function(slide:any) {
this.currentSlideIndex = slide.activeIndex;
}
};
Je souhaite informer un service de la modification, le problème est que le service n'est pas encore disponible lorsque la configuration est définie:
constructor(private user: UserService,
private layout: LayoutService) {
}
Comment puis-je informer le service de ce changement de variable?
Eh bien, comme suggéré d'utiliser Observables, ce n'est pas vraiment un gros problème et cela fonctionne assez bien. Ce n'est pas plus que quelques lignes en fait.
Déclarez dans un service commun, un service qu'ils partagent comme le même, par exemple un service déclaré comme fournisseur dans ce module, afin de ne pas vous retrouver avec deux instances du même service. Ajoutez un Subject
à ce service et une méthode pour émettre de la valeur:
public configObservable = new Subject<number>();
emitConfig(val) {
this.configObservable.next(val);
}
Et dans le composant, vous devez définir la configuration:
emit(val) { // your value you want to emit
this.myService.emitConfig(val);
}
Et puis abonnez-vous à la valeur là où vous en avez besoin:
constructor(private myService: MyService) {
this.myService.configObservable.subscribe(value => {
this.value = value;
})
}
Plunker de travail avec le code ci-dessus dans une interaction parent-enfant:
Quant à votre commentaire sur @Input()
, cela fonctionne bien quand une interaction parent-composant est parent, donc cela ne fonctionnerait pas vraiment pour vous dans ce cas.