#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, вот и всё, ничего сложного тут нет.
Комментариев нет:
Отправить комментарий