Свойство Angular update с обнаружением изменений OnPush

#angular

#angular

Вопрос:

С помощью этого кода с использованием changeDetection: ChangeDetectionStrategy.По умолчанию

 export class HomePageComponent {
  constructor(
    private i18nService: I18nService
  ) {}
  get language(): string {
    return this.i18nService.language;
  }
}
  

angular обновляет представление, но с помощью changeDetection: ChangeDetectionStrategy.OnPush,

это не так, поэтому вопрос:

Как можно обновить представление с помощью OnPush?

Комментарии:

1. Что вы пытаетесь сделать со службой Language ? Будьте более конкретны, чего вы ждете?

Ответ №1:

OnPush запускает обнаружение изменений только один раз (при создании). И Angular тогда запускает обнаружение изменений только при изменении ссылки на свойство @Input() (или при вызове обработчика событий вашего компонента). В вашем компоненте я вообще не вижу операторов @Input().

Вы можете вручную запустить обнаружение изменений, введя ChangeDetectorRef в свой компонент и вызвав для него соответствующие методы.

Комментарии:

1. Спасибо за ответ, но «Вы можете вручную запустить обнаружение изменений, введя ChangeDetectorRef в свой компонент и вызвав для него соответствующие методы». Я это знаю, но в данном случае я действительно не знаю, куда поместить вызов

2. Поскольку ваша служба не сигнализирует, когда что-то меняется, вам нечего слушать, чтобы узнать, когда меняется язык. Таким образом, либо вы меняете службу, которая предоставляет наблюдаемый объект, который вы можете прослушивать в своих компонентах, и подписываетесь на этот наблюдаемый объект для ручного вызова changeDetection, либо вы можете периодически запускать changeDetection, используя тайм-аут javascript. Пример можно найти здесь: plnkr.co/edit/RfJwHqEVJcMU9ku9XNE7?p=previewamp;preview