#angularjs #javascript
Чесно, не зря пишут, что это сложная тема для понимания. Я не понял, как и большинство.
Где использовать вот эту штуку?
Пример:
.directive('clickable', function() {
return {
restrict: "E",
link: function($scope, element, attrs) {
element.bind('click', function() {
$scope.$apply(function() {
$scope.user++;
$scope.bar++;
});
console.log('1')
});
}
}
});
Без обертки $scope.$apply() пример работать не будет.
Не знаю, нашел такую заметку:
Важно: любые события браузера вызываются вне области видимости AngularJS, поэтому
внутри ваших обработчиков таких событий необходимо вызывать $scope.$apply.
Ответы
Ответ 1
Так, а что конкретно не понятно? Функции $apply/$digest запускают dirty-check, и если данные в $scope изменились, то обновляют view, вот и вся магия. Когда вы изменяете данные внутри angular, например, на ng-click, он сам вызывает метод $apply, если ваш код выполняется не через angular, то нужно запустить dirty-check руками. Вот очень приблизительные примеры: ng-click внутри себя angular, заменил это конструкцию на: jqLite('button').on('click', function (evt) { evt.preventDefault(); $scope.counter++; $scope.$apply(); }); или $timeout(function () { $scope.foo = "bar"; }, 100); // эквивалентна setTimeout(function () { $scope.foo = "bar"; $scope.$apply(); }, 100); Всё это очень примерно, но суть в том, что когда вы используете биндинг или методы angular, он за вас вызывает $apply/$digest, вот и всё, ничего сложного тут нет.
Комментариев нет:
Отправить комментарий