#angular #universal #angular11
#angular #Универсальный #angular11
Вопрос:
На моем веб-сайте логотип поворачивается, когда пользователь прокручивает страницу.
Код очень простой :
Компонент
@HostListener('window:scroll', ['$event'])
scrollPos(){
if (typeof window !== 'undefined') {
return Math.round(window.scrollY);
}
}
HTML
<img src="assets/logo.svg" [ngStyle]="{ transform: 'rotate(' scrollPos() 'deg)' }" />
Однако иногда этот базовый код генерирует эту ошибку при навигации по веб-сайту : (
ERROR Error: NG0100: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it
was checked. Previous value: 'rotate(397deg)'. Current value: 'rotate(331deg)'.
Как я могу обновить приведенные выше коды, чтобы избежать этой ошибки?
спасибо за вашу поддержку
Ответ №1:
Обычно вам следует избегать возврата вещей, @HostListeners
потому что … они не должны вызываться ничем, кроме событий, которые они прослушивают;
Вместо этого назначьте window.scrollY
свойству в вашем компоненте и получите к нему доступ из вашего компонента;
public wScrollY: number = 0;
@HostListener('window:scroll', ['$event'])
scrollPos(){
if (typeof window !== 'undefined') {
this.wScrollY = Math.round(window.scrollY);
}
}
Шаблон
<img src="assets/logo.svg" [ngStyle]="{ transform: 'rotate(' wScrollY 'deg)' }" />
Комментарии:
1. кажется, работает как шарм, спасибо, Майк!