2015-02-02 1 views
2

У меня есть функция с областью действия, которая срабатывает больше раз, чем вызывается, и не может понять, почему. Я создал небольшой пример в plunker, и ниже приведены фрагменты. при загрузке страницы вы думаете, что $ scope.hex_color должен срабатывать три раза, но если вы просматриваете консоль в отладчике (Chrome F12), она срабатывает девять раз.Функция угловой функции scope чаще срабатывает, чем вызывается

Может ли кто-нибудь объяснить?

http://plnkr.co/edit/7DMwA2InP0v6sD2s5WxW?p=preview

фрагмент кода HTML:

<div ng-repeat="shape in list"> 
    <div>{{ shape.Title }} | {{ hex_color(shape) }}</div> 
</div> 

контроллер фрагмент кода:

$scope.list = [ 
    { "Id": 1000, "Title": "Red Ball", "red": "ff", "green": "00", "blue": "00" }, 
    { "Id": 1001, "Title": "Green Triangle", "red": "00", "green": "ff", "blue": "00" }, 
    { "Id": 1002, "Title": "Blue Square", "red": "00", "green": "00", "blue": "ff" }, 
]; 
$scope.hex_color = function (shape) { 
    $log.info("hex_color: " + shape.Id); 
    return "#" + shape.red + shape.green + shape.blue; 
} 

enter image description here

Обновление: Если я запустить код в локальном сервере (в приведенном выше примере было контроль кода в плункере), это огонь s 15 раз!

enter image description here

+1

возможно дубликат (http://stackoverflow.com/questions/14973792/why-angularjs-will-invoke [Почему angularjs будет вызывать функцию \ 'имя() \' дважды?] -функция-имя-дважды) – JLRishe

+0

См. также: http://stackoverflow.com/questions/14987277/function-called-multiple-times-in-angularjs-repeat-section – JLRishe

+0

Я понимаю это сейчас. Спасибо JLRishe и squiroid за ответы! – hlo

ответ

1

Из того, что я могу сказать, что фильтр выполняется один раз в течение каждого $ дайджеста. Это имеет смысл, когда вы думаете о том, как AngularJS управляет привязками данных. Поскольку AngularJS использует грязную проверку, он должен перепроверить все свои внутренние инструкции $ watch() после того, как «вы» (как программист/пользователь) что-то предпримете. В конце концов, каждое взаимодействие, предпринятое пользователем, может привести к изменению модели представления, которая, в свою очередь, может изменить фильтруемую коллекцию. Таким образом, фильтр должен быть повторно применен в конце каждого $ digest.

Источник: - http://www.bennadel.com/blog/2489-how-often-do-filters-execute-in-angularjs.htm

Смежные вопросы