2015-08-07 4 views
2

У меня есть список с нг-повтором в угловом и кнопках, которые переключать проверяемое свойство во всех элементах (1.4):AngularJS проблема производительности нг-модель против нг-класс и т.д.

<button ng-click="selectAll()">select all</button> 

примером 1:

<li ng-repeat="item in items"> 
    <input type="checkbox" ng-model="item.checked"> {{ item.name }} 
</li> 

пример 2:

<li ng-repeat="item in items"> 
    <span class="glyphicon" ng-class="{'glyphicon-ok': item.checked}"></span> {{ item.name }} 
</li> 

пример 3:

<li ng-repeat="item in items"> 
    <span class="glyphicon glyphicon-ok" ng-show="item.checked"></span> {{ item.name }} 
</li> 

Пример 4:

<li ng-repeat="item in items"> 
    <span>{{ item.checked }}</span> {{ item.name }} 
</li> 

Производительность примера 1 и 4 ОК. Но пример 2 и 3 имеет почти 1 сек. лаг. В массиве около 200 элементов.

Почему производительность настолько отличается? Я хотел бы иметь собственные «галочки» с glyphicon - так что я хотел бы иметь пример 2 работы, но производительность плохо

+1

Как вы отслеживаете производительность? Я предполагаю, что вы нажимаете на CSS, который добавляет некоторые накладные расходы на время рендеринга. Одна вещь, которую вы можете сделать для повышения производительности, - использовать синтаксис 'track by '. Это позволяет DOM перерабатываться в некоторых случаях. И наоборот, исключение выражения 'track by' означает, что новые элементы DOM создаются каждый раз, когда массив' items' обновляется (не уверен, что это относится только к * нажатым * элементам, или весь список сбрасывается и повторно просматривается). – jusopi

ответ

0

Вы можете попробовать следующее, например, 2:

<li ng-repeat="item in items track by item.checked"> 
    <span class="glyphicon" ng-class="{'glyphicon-ok': item.checked}"></span> 
    {{ item.name }} 
</li> 

Для примера 3, попробуйте следующее:

<li ng-repeat="item in items track by item.checked"> 
    <span class="glyphicon glyphicon-ok" ng-if="item.checked"></span> {{ item.name }} 
</li> 
+0

трек должен быть уникальным, imo. item.checked не кажется уникальным. лучше использовать $ index. – YOU

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