Подтвердить что ты не робот

Angular2 обнаружение изменений в сервисе

У меня есть один компонент в Angular2, который меняет переменную класса "lang" в моем сервисе translate.service.ts. В другом компоненте я получаю dict с переводом на init. Если первый компонент меняет язык служб позже, я хочу автоматически выполнить запрос 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();
}
4b9b3361

Ответ 1

Редактировать:

После Марк комментарий, 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();
      }
    );
  }
}

Смотрите этот вопрос для более подробной информации: