У меня есть событие click, которое происходит вне области моей пользовательской директивы, поэтому вместо использования атрибута «ng-click» я использую слушатель jQuery.click () и вызываю функцию внутри моей области следующим образом:
$('html').click(function(e) {
scope.close();
);
close () - это простая функция, которая выглядит следующим образом:
scope.close = function() {
scope.isOpen = false;
}
На мой взгляд, у меня есть элемент с «ng-show», связанный с isOpen, например:
<div ng-show="isOpen">My Div</div>
При отладке я обнаружил, что close () вызывается, isOpen обновляется до false, но представление AngularJS не обновляется. Есть ли способ, которым я могу вручную сказать Angular обновить вид? Или есть более «угловой» подход к решению этой проблемы, которого я не вижу?
javascript
angularjs
Dustin
источник
источник
$scope.$apply();
?Зачем
$apply
звонить?TL; DR :
$apply
должен вызываться всякий раз, когда вы хотите применить изменения, сделанные за пределами мира Angular.Просто чтобы обновить ответ @ Dustin , вот объяснение того, что именно $ apply делает и почему это работает.
Angular позволяет использовать любое значение в качестве цели привязки. Затем в конце любого поворота кода JavaScript он проверяет, изменилось ли значение. Этот шаг, который проверяет, изменились ли какие-либо значения привязки, имеет метод,
$scope.$digest()
1 . Мы почти никогда не вызываем его напрямую, так как используем$scope.$apply()
вместо этого (который будет вызывать$scope.$digest
).Angular отслеживает только те переменные, которые используются в выражениях, и все, что находится внутри объекта
$watch
. Поэтому, если вы изменяете модель вне контекста Angular, вам необходимо$scope.$apply()
будет распространить эти изменения, иначе Angular не будет знать, что они были изменены, поэтому привязка не будет обновлена 2 .источник
использование
Не забудьте ввести
$route
в ваш контроллер.источник
$state.reload()