我在Angular2中有一个组件正在改变一个" lang"我的服务translate.service.ts中的类变量。在另一个组件中,我正在使用init上的转换获取dict。如果第一个组件稍后更改了服务语言,我想自动重新获取第二个组件中的dict。我该怎么做?
第一部分:
setLang(lang) {
this._translateService.setLang(lang);
}
服务:
dict = { "en": {}};
lang = "en";
setLang(lang) {
this.lang = lang;
}
getLang() {
return this.dict;
}
第二部分:
ngOnInit() {
this.dict = this._translateService.getDict();
}
答案 0 :(得分:42)
修改强>
根据Mark的评论,应首选Subject
/ Observable
:
EventEmitter只应用于在组件中发出自定义事件,并且我们应该将Rx用于其他可观察/事件场景。
原始答案:
您应该在服务中使用EventEmitter
:
export class LangService {
langUpdated:EventEmitter = new EventEmitter();
setLang(lang) {
this.lang = lang;
this.langUpdated.emit(this.lang);
}
getLang() {
return this.dict;
}
}
组件可以订阅此事件,以便在lang
属性更新时收到通知。
export class MyComponent {
constructor(private _translateService:LangService) {
}
ngOnInit() {
this._translateService.langUpdated.subscribe(
(lang) => {
this.dict = this._translateService.getDict();
}
);
}
}
有关详细信息,请参阅此问题: