Почему angularjs дважды вызывает функцию `name ()`?
Код прост:
AngularJS Plunker document.write(""); Hello {{name()}}! var app = angular.module('plunker', []); app.controller('MainCtrl', function($scope) { $scope.name= function() { console.log("---name---:" + new Date()); return "Freewind"; }; });
Вы можете видеть, что есть функция name
и мы вызываем ее в теле только один раз. Но в консоли он дважды печатает ---name---:
::
---name---:Wed Feb 20 2013 14:38:12 GMT+0800 (中国标准时间) ---name---:Wed Feb 20 2013 14:38:12 GMT+0800 (中国标准时间)
Вы можете увидеть демо-версию здесь: http://plnkr.co/edit/tb8RpnBJZaJ73V73QISC?p=preview
- AngularJS, решение и неизвестный поставщик
- Фильтр по убыванию по дате в AngularJs
- AngularJs: Как проверить изменения полей ввода файлов?
- Использование ui-router с Bootstrap-ui modal
- Что такое @id как передано в $ resource?
Почему функция name()
была вызвана два раза?
- angularjs: настраиваемая директива для проверки наличия имени пользователя
- AngularJS - сброс значения $ scope.value не изменяет значение в шаблоне (случайное поведение)
- Как отправить csrf_token () внутри формы AngularJS с использованием API Laravel?
- Как загрузить файл в angularjs e2e испытание protractorа
- AngularJS - дождитесь завершения нескольких запросов ресурсов
- Что именно вы делаете с функцией transclude и функцией clone linking?
- ng-model для `` (с директивой DEMO)
- Использование одного и того же controllerа на разных элементах для обращения к одному и тому же объекту
В AngularJS все, что завернуто в двойные фигурные скобки, является выражением, которое оценивается по крайней мере один раз во время цикла дайджеста.
AngularJS работает путем непрерывного цикла дайджеста, пока ничего не изменилось. Именно поэтому он обеспечивает актуальность представления. Поскольку вы вызвали функцию, она запускает ее один раз, чтобы получить значение, а затем второй раз, чтобы увидеть, что ничего не изменилось. В следующем цикле дайджест он будет работать как минимум еще раз.
Как правило, это хорошая идея, чтобы вызывать только идемпотентные методы (например, name
) из шаблона именно по этой причине.