AngularJS ng-repeat指令中使用track by子語句解決重復數據遍歷錯誤問題
本文實例講述了AngularJS ng-repeat指令中使用track by子語句解決重復數據遍歷錯誤問題。分享給大家供大家參考,具體如下:
我們可以使用ng-repeat指令遍歷一個JavaScript數組,當數組中有重復元素的時候,AngularJS會報錯:
Error: [ngRepeat:dupes] Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: user in users, Duplicate key: number:1。下面的代碼就會報錯:
<html> <head> <script src="angular-1.2.2/angular.js"></script> <script> function rootController($scope,$rootScope,$injector) { $scope.dataList = [1,2,1]; } </script> </head> <body ng-app ng-controller="rootController"> <div ng-repeat="data in dataList"> {{data}} </div> </body> </html>
這是因為ng-Repeat不允許collection中存在兩個相同Id的對象。
For example: item in items is equivalent to item in items track by $id(item). This implies that the DOM elements will be associated by item identity in the array.
對于數字或者字符串等基本數據類型來說,它的id就是它自身的值。因此數組中是不允許存在兩個相同的數字的。為了規(guī)避這個錯誤,需要定義自己的track by表達式。
// 業(yè)務上自己生成唯一的id
item in items track by item.id
//或者直接拿循環(huán)的索引變量$index來用
item in items track by $index
如果是javascript對象類型數據,那么就算內容一摸一樣,ng-repeat也不會認為這是相同的對象。如果將上面的代碼中dataList,那么是不會報錯的。比如$scope.dataList = [{"age":10},{"age":10}];
更多關于AngularJS相關內容感興趣的讀者可查看本站專題:《AngularJS入門與進階教程》及《AngularJS MVC架構總結》
希望本文所述對大家AngularJS程序設計有所幫助。
相關文章
AngularJS入門教程之 XMLHttpRequest實例講解
本文主要講解 AngularJS XMLHttpRequest,這里給大家整理相關資料并提供實例代碼,有需要的小伙伴參考下2016-07-07利用Angular2的Observables實現交互控制的方法
這篇文章主要介紹了利用Angular2的Observables實現交互控制的方法,我們主要針對一些在跟服務器端交互的時候遇到的問題,來看看Observable給我們帶來的特性。感興趣的可以了解一下2018-12-12快速解決angularJS中用post方法時后臺拿不到值的問題
今天小編就為大家分享一篇快速解決angularJS中用post方法時后臺拿不到值的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08AngularJS下$http服務Post方法傳遞json參數的實例
下面小編就為大家分享一篇AngularJS下$http服務Post方法傳遞json參數的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03