Angular2 detect change in service

Edit:

Following the Mark’s comment, a Subject / Observable should be preferred:

EventEmitter should only be used for emitting custom Events in components, and that we should use Rx for other observable/event scenarios.

Original Answer:

You should use an EventEmitter in the service:

export class LangService {
  langUpdated:EventEmitter = new EventEmitter();

  setLang(lang) {
    this.lang = lang;
    this.langUpdated.emit(this.lang);
  }

  getLang() {
    return this.dict;
  }
}

Components could subscribe on this event to be notified when the lang property is updated.

export class MyComponent {
  constructor(private _translateService:LangService) {
  }

  ngOnInit() {
    this._translateService.langUpdated.subscribe(
      (lang) => {
        this.dict = this._translateService.getDict();
      }
    );
  }
}

See this question for more details:

  • Delegation: EventEmitter or Observable in Angular
  • Delegation: EventEmitter or Observable in Angular

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)