我有一個簡單的數組環路和ng-repeat
:Angularjs與NG-重複奇怪的問題
<p ng-repeat="person in persons">
Hello {{person}}!
</p>
但是,當我用它生成的循環,結果是很奇怪! ng-repeat
不按順序打印。見codepen。
我有一個簡單的數組環路和ng-repeat
:Angularjs與NG-重複奇怪的問題
<p ng-repeat="person in persons">
Hello {{person}}!
</p>
但是,當我用它生成的循環,結果是很奇怪! ng-repeat
不按順序打印。見codepen。
ng-repeat
爲對象{}
本身不提供與順序顯示(在大多數情況下的元件具有順序,但不是在100%) - 在對象的情況下,關鍵是String
,所以他們被排序爲字符串(["1", "11", "2"]
) - 但JS根本不保留{}
的順序,所以即使它們以任意順序顯示,總有一天它可能會沒有任何大的原因(瀏覽器更新等)而中斷。只需使用排序的數組,其中排序更多自然(鍵是number
),請檢查Codepen:https://codepen.io/anon/pen/mmJyGX或使用orderBy並附加字段,如id
。我的建議是,如果您關心訂單,請始終使用[]
而不是{}
,因爲它始終會按預期工作。
使用最近版本的angular(例如1.6.0),它不會發生。 您使用舊版本(1.1.5),似乎這個版本默認排序數組。
在您的JS(上代碼筆),你必須:
$scope.persons = {};
for (var i = 0; i < 20; i++) {
console.log(i);
$scope.persons[i] = i;
}
你正在發起persons
爲對象。更改爲$scope.persons = [];
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
$scope.persons = [];
for (var i = 0; i < 20; i++) {
console.log(i);
$scope.persons[i] = i;
$scope.results = angular.toJson($scope.persons)
}
//$scope.persons = [1, 2, 3, 4, 5];
});