我在Angular2中有一个组件,它在我的服务translate.service.ts中更改了一个"lang"类变量.在另一个组件中,我正在使用init上的转换获取dict.如果第一个组件稍后更改了服务语言,我想自动重新获取第二个组件中的dict.我怎么做?
第一部分:
setLang(lang) {
this._translateService.setLang(lang);
}
Run Code Online (Sandbox Code Playgroud)
服务:
dict = { "en": {}};
lang = "en";
setLang(lang) {
this.lang = lang;
}
getLang() {
return this.dict;
}
Run Code Online (Sandbox Code Playgroud)
第二部分:
ngOnInit() {
this.dict = this._translateService.getDict();
}
Run Code Online (Sandbox Code Playgroud)
Thi*_*ier 43
编辑:
在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;
}
}
Run Code Online (Sandbox Code Playgroud)
组件可以订阅此事件,以便在lang更新属性时收到通知.
export class MyComponent {
constructor(private _translateService:LangService) {
}
ngOnInit() {
this._translateService.langUpdated.subscribe(
(lang) => {
this.dict = this._translateService.getDict();
}
);
}
}
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅此问题:
| 归档时间: |
|
| 查看次数: |
25391 次 |
| 最近记录: |