Как 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 не меняется

Другие вопросы по тегам