Tengo un componente en Angular2 que está cambiando una variable de clase "lang" en mi servicio translate.service.ts. En otro componente, busco un dictado con la traducción en init. Si el primer componente cambia el idioma de los servicios más tarde, quiero recuperar el dict en el segundo componente automáticamente. ¿Cómo puedo hacer eso?
Primer componente:
setLang(lang) { this._translateService.setLang(lang); }Servicio:
dict = { "en": {}}; lang = "en"; setLang(lang) { this.lang = lang; } getLang() { return this.dict; }Segundo componente:
ngOnInit() { this.dict = this._translateService.getDict(); }Editar:
Siguiendo el comentario de Mark , se debe preferir un Subject / Observable :
EventEmitter solo debe usarse para emitir eventos personalizados en componentes, y debemos usar Rx para otros escenarios de eventos/observables.
Respuesta original:
Debe usar un EventEmitter en el servicio:
export class LangService { langUpdated:EventEmitter = new EventEmitter(); setLang(lang) { this.lang = lang; this.langUpdated.emit(this.lang); } getLang() { return this.dict; } } Los componentes pueden suscribirse a este evento para recibir una notificación cuando se actualice la propiedad lang .
export class MyComponent { constructor(private _translateService:LangService) { } ngOnInit() { this._translateService.langUpdated.subscribe( (lang) => { this.dict = this._translateService.getDict(); } ); } }Vea esta pregunta para más detalles: