#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