Как AngularJS $ отслеживает эти случаи в ng-повторении?
Я понимаю, что AngularJS настраивает некоторые часы на ng-repeat. Какой тип часов настроен на данный момент?
Кроме того, кто-то может объяснить, что происходит в каждом из этих сценариев? Я хочу знать, в случае, если у меня есть много предметов, так что пользователь не увязнет в часах, которые можно было бы убрать, если бы я написал это другим способом.
Один
<div ng-repeat="item in items">
<div>{{item.property}}</div>
</div>
Два
<div ng-repeat="item in items">
<div>{{item.property | myFormatter}}</div>
</div>
Три
<div ng-repeat="item in items">
<div>{{format(item.property)}}</div>
</div>
четыре
<div ng-repeat="item in items">
<div>{{item.something()}}</div>
</div>
1 ответ
Каждый ng-repeat
установит часы на items
, (Если вы посмотрите на исходный код ng-repeat, большая его часть - это функция watchExpression метода $watch). Каждый раз, когда выполняется угловой цикл дайджеста, каждый item
в items
будет проверен этой функцией часов. (Обратите внимание, что в цикле дайджеста эту функцию наблюдения можно вызывать более одного раза).
каждый {{}}
устанавливает часы $. Если что-то вроде item.property
находится внутри {{}}s, грязная проверка по крайней мере один раз за цикл дайджеста.
Если функция находится внутри {{}}s, то эта функция вызывается как минимум один раз за цикл дайджеста.
Я не уверен насчет x | filter
, но эта скрипка указывает на то, что фильтр вызывается по крайней мере один раз в каждом цикле дайджеста, даже если x
не меняется