Есть 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 ?