Когда браузер изменяет размеры, он ждет 0,5 секунды, прежде чем попытается изменить размер группы кнопок.Если это плохая практика, что я должен использовать вместо этого?
Вы задерживаете каждое событие изменения размера.Как правило, вы хотите отменить и обрабатывать только одно событие каждые 500 мс.Это можно сделать с помощью наблюдаемого, но обязательно отмените подписку, когда компонент уничтожен.
observableFromEvent(window, 'resize')
.pipe(debounceTime(500))
.subscribe(() => this.resize(this.element, this.className))
Также @HostListener()
никогда не запускает события во время рендеринга на стороне сервера.На сервере нет DOM для запуска событий изменения размера окна.
setTimeout(function () {
resize(element, className);
}, 500);
Используемая здесь глобальная функция setTimeout
имеет другую сигнатуру функции в NodeJS.Когда вы запускаете приложение в Angular Universe, оно запускается внутри NodeJS, чтобы сгенерировать HTML, прежде чем оно перейдет в веб-браузер.setTimeout возвращает число в веб-браузерах, но возвращает дескриптор ресурса в NodeJS.
Если вы собираетесь запускать свое приложение в Angular Universal, то это означает, что вы пишете исходный код, который отделен от веб-браузера.Это означает, что нет прямых манипуляций с DOM, нет глобальных переменных и глобальных оконных переменных.