angular1中ng-repeat效率優化方法:

1.當 ng-repeat 的數組被替換時, 它默認並不會從新利用已有的 Dom 元素,而是直接將其所有刪除並從新生成新的數組 Dom 元素:後端

2.Dom 的頻繁操做是很是不友好的, ng-repeat爲何不能利用已有的 dom 元素去更新數據呢?由於你沒有把數組元素的標識屬性告訴它,那麼兩次替換的時候它就沒辦法追蹤了;數組

3.ng-repeat會爲每個元素加上一個hashkey $$hashKey來識別每個元素,當咱們從後端從新獲取數據時,即便數據徹底同樣,可是因爲hashKey不同,dom

  angular會刪除以前的全部dom,從新生成新的dom,這樣效率就會大大下降。能夠理解爲ng-repeat默認是 track by $$hashKey的。spa

  因此,咱們應該使用一些不會變的東西來做爲標識,好比後端數據的id.code

4.列如:blog

<li class="gwclist" ng-repeat = "gwc in data | orderBy:'-sqtime' track by gwc.ID" ng-click = "gwcdetail(gwc)">
  <h5>申請人:{{gwc.sqname}}<span class="pull-right color-dimgray">{{gwc.sqtime}}</span></h5>
  <span>用餐時間:{{gwc.mettime}}</span>
<p ng-class="{0:'color-lightyellow',1:'color-red',2:'color-blue',3:'color-dimgray'}[{{gwc.processState | showstyle}}]">流程狀態:{{gwc.processState}}</p> <div class="button-bar" ng-if = "gwc.processState == '未提交'"> <a class="button button-small button-positive" ng-click="submit(gwc.ID)">提交</a> <a class="button button-small button-stable" ng-click="delete(gwc.ID)">刪除</a> </div> </li>
優勢:這樣當從新獲取數據時,因爲ID沒有變,angular就不會去刪除原來的dom,只會更新其中的內容,不一樣的ID再添加新的dom。效率就能提高了;

5.注意:qt

    track by要放在orderBy以後,不然會影響orderBy的效果;hash

    當單一數組有重複元素時,須要使用track by $index來保證兩個元素都會渲染,不然只會渲染一個;it

相關文章
相關標籤/搜索