在阅读了关于SO的其他几个问题之后,我仍然想知道为什么使用'跟踪'在我的Angular应用程序中导致事物陷入困境并显示10 $ digest()迭代错误。
我使用内部API检索用户列表(~1000,我知道我不应该同时抓取所有用户,但这是一个PoC应用程序)。返回的数据如下所示:
[
{ FirstName: "John", LastName: "Smith", Login: "SMITJOH1" },
{ FirstName: "Jane", LastName: "Citizen", Login: "CITIJAN1" },
{ ... }
]
Login
始终是唯一的,因此将其用作跟踪器是有意义的。
我的控制器看起来像这样:
idfixerApp.controller('addController', function($scope, $http, $route, $rootScope) {
$scope.loadUsers = function() {
$http.get("/users/all").success(function(data) {
$scope.users = data
$scope.selected = $scope.users[0]
})
}
$scope.orderBy = 'LastName';
$scope.loadUsers()
})
我的观点如下:
<div ng-controller="addController" id="addController">
<input ng-model="query">
<select ng-model="orderBy">
<option value="LastName">Last Name</option>
<option value="FirstName">First Name</option>
</select>
<select ng-options="user as (user.LastName | uppercase) + ', ' + user.FirstName for user in users track by user.Login | filter:query | orderBy:orderBy" ng-model="selected" size="20"></select>
</div>
如果我不使用track by
,我可以快速过滤和排序,但是一旦我添加track by user.Login
,我就会开始收到$ digest()错误,整个页面变慢爬行。
由于我只抓取一次API数据(我添加了console.log
以确保)并且由于user.Login
永远不会改变,所以我对为什么{{感到困惑1}}导致我的应用程序停止运行。
解释会很精彩!