ng-repeat = 'item in items'
當items是一個簡單數組時,如果數組中有重復數據,會報錯.這是因為:出于性能考慮(可能還有其他因素),ng-repeat時會有一個默認的keep track
函數來維護視圖中dom元素和可遍歷對象的一一對應關系,這樣當可遍歷對象發生變化,例如往數組中push一個值后,視圖中的所有dom元素不必全部重新渲染一遍
所以如果你想repeat一個包含重復數據的數組只需要修改默認的'keep track'函數,可以這樣寫:
ng-repeat = 'item in items track by $index'
性能優化
當遍歷一個對象數組時,可能通常會這樣寫:
<div ng-repeat="model in collection"> {{model.name}}</div>
這時默認會track
model對象,我們可以手動的更改track
來減少數據更改時,重新渲染dom元素的工作量(即使collection中對象已經被替換成了新的),這在collection很大時性能提升是顯著的
如果model對象中存在唯一的id屬性,我們可以這樣寫:
<div ng-repeat="model in collection track by model.id"> {{model.name}}</div>
如果沒有唯一的id屬性,我們同樣可以加上track by $index
track by
必須放在表達式的最后
關于ng-repeat-start/ng-repeat-end
必須配套使用
目前給我的感覺是避免了多余div節點的引入