Задать вопрос

Angularjs. Почему изменения на странице происходят только после $apply?

Есть 2 инпута

<input type="text" class="search-input real-search-input" data-ng-hide="showFakeInput"/>
<input type="text" class="search-input fake-search-input " disabled="disabled" data-ng-show="showFakeInput" />


В контроллере слушаются события. Сами события вызываются из директивы.
$scope.showFakeInput = false; 

$rootScope.$on('showFakeSearchInput', function () {
      $scope.showFakeInput = true;
});

$rootScope.$on('hideFakeSearchInput', function () {
     $scope.showFakeInput = false;            
});


При первом вызовы события 'showFakeSearchInput' все работает прекрасно. Первый инпут ('.real-search-input') исчезает, и .fake-search-input появляется.

А вот если потом вызвать 'hideFakeSearchInput', то изменений не происходит. Т.е переменная меняется, но .real-search-input остается скрытым, а .fake-search-input остается видимым.

Если сделать так
$rootScope.$on('hideFakeSearchInput', function () {
     $scope.showFakeInput = false;        
     $scope.$apply();    
});

То все работает как надо.

Почему так происходит и можно ли обойтись без $apply ?
  • Вопрос задан
  • 2837 просмотров
Подписаться 3 Оценить Комментировать
Ответ пользователя _ _ К ответам на вопрос (4)
AMar4enko
@AMar4enko
Покажите вызов события из директивы. Предполагаю, что проблема там.
Ответ написан