Принудительное обнаружение изменений из службы со стратегией обнаружения изменений в качестве OnPush

Наше приложение Angular2 использует службу перевода для обеспечения перевода, как это

getResourceValue(resKey: string): string {
  return this.translateService.getResourceValue(resKey);
}

Служба получает асинхронный перевод из вызовов API с каждым загруженным компонентом. Наблюдаемый объект содержит все асинхронные переводы. Если перевод для этого ключа не готов, он просто возвращает ключ. А затем обновляет его нужной строкой, когда перевод готов.

в шаблоне:

getResourceValue('Page-Title')

Который отлично работает.

Но на некоторых страницах есть «ChangeDetectionStrategy.OnPush». Эти страницы не будут инициировать обнаружение изменений при изменении данных перевода. Без этой настройки все работает.

У меня такой вопрос: есть ли способы принудительно детектировать где-то только для перевода?


person Paul    schedule 31.01.2017    source источник


Ответы (1)


Благодаря angular2localization это исправлено путем передачи ChangeDetectorRef следующим образом:

В сервисе у нас есть функция для загрузки переданного в Json файла и объекта ChangeDetectorRef:

getTranslation(resPath: string, changeDetector?: ChangeDetectorRef): Observable<any> {
    return Observable.of(this.processTranslation(resPath, changeDetector));
    }
}

Когда перевод будет выполнен, changeDetector вызовет метод markForCheck;

В каждом компоненте, который нуждается в переводе, мы будем вызывать эту функцию и передавать changeDetector этого компонента.

Это прекрасно решает проблему.

Надеюсь, это может помочь кому-то.

person Paul    schedule 25.04.2017