Angular2检测服务中的变化

时间:2016-03-08 14:00:20

标签: angular

我在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();
}

1 个答案:

答案 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();
      }
    );
  }
}

有关详细信息,请参阅此问题: