volkov_p_v
@volkov_p_v
FrontEnd разработчик

Почему в angular не отображаются изменения до наведения на них мышкой?

Заменил интересную особенность. Если через setTimout() в scope делать изменения:
<div ng-show="showMe">Покажи это сообщение</div>

а в контроллере :
showMe = true;
setTimout(function(){
    showMe = false
}, 0)

(время в setTimout не имеет значение)

Получим, что блок не исчезнет пока не наведёшь на него мышкой.

Как этот глюк можно победить и сделать так, что бы он изменял view через setTimeout не наводя на него мышкой?
  • Вопрос задан
  • 258 просмотров
Решения вопроса 2
Проблема в том, что setTimeout вызывает функцию асинхронно, и нужно уведомить ангуляр о том, что данные нужно обновить при помощи метода $scope.$apply().
Чтобы избежать этого можно использовать сервис $timeout(ссылка на доку), вместо стандартного window.setTimeout.
Ответ написан
Комментировать
GTRxShock
@GTRxShock
Full-stack developer (Symfony, Angular)
Да, замечал такое поведение, причем не обязательно наводить мышкой на этот элемент, можно начать вводить в какое-нибудь поле ввода, которое отслеживает ангуляр, и только тогда view обновляется.

Как вариант, можно обновить руками (но не стоит увлекаться):
showMe = true;
setTimout(function(){
    showMe = false
    $scope.$apply();
}, 0)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы