Ответ 1
Просто распространяю свои комментарии, чтобы ответить.
Angular 1.3 одноразовый синтаксис привязки (::
) действительно удалит ненужные часы. Просто вам нужно измерить часы через некоторое время после того, как вы установите соответствующие данные. Вот почему. Когда вы устанавливаете одноразовое свойство привязки в представлении, angular будет устанавливать временные часы на нем, пока не получит определенное значение, то есть ничего, кроме undefined
. Этот подход существует по какой-то причине - для поддержки связанных значений, которые заполняются посредством отложенной операции, такой как ajax-вызов, тайм-аут, согласование цепочки предложений и т.д. Без этого ::
не будет работать успешно ни на чем, кроме предварительно заполненной границы значения.
Поэтому просто убедитесь, что вы установили некоторое значение в определенный момент времени для одноразовых значений привязки. Не позволяйте ему оставаться undefined.
Скажите, если у вас есть условие <div ng-if="::lol"></div>
, повторяющееся 100 раз. Просто убедитесь, что когда вы привязываете значение к репитеру или какую-либо операцию, которая определяет статус lol
, даже если эта операция завершилась неудачей (скажем, ошибка вызова ajax), все еще задано значение (даже null
также является значением в javascript) к нему. Часы будут удалены после предстоящего цикла дайджеста, который отображает соответствующие привязки DOM.
В вашем конкретном плунжере вы также можете:
<ul ng-repeat="item in items" ng-if="::lol">
<li>{{ ::item }}</li>
</ul>
вместо
<ul ng-repeat="item in items">
<li ng-if="::lol">{{ ::item }}</li>
</ul>