我了解您可以使用track by expr
来指定项目在ng-repeat
指令中的键入方式。
但是没有track by
,AngularJS如何识别项目?
我可以通过改变对象来控制对象的跟踪方式,而不使用track by
吗?
来自文档:
如果未指定跟踪功能,则ng-repeat按照集合中的标识关联元素。
但目前尚不清楚。什么"集合中的身份"意思?
答案 0 :(得分:3)
如果省略track by
表达式,则默认情况下,角度将按$$hashkey
跟踪,该值会自动按角度插入到对象列表中。 $$hashkey
称为集合的身份。
答案 1 :(得分:2)
如果对对象键执行重复,则跟踪标识符是键
e.g. ng-repeat="(key,value) in thingies"
对于数组,通过为每个数组项调用hashKey函数来确定跟踪标识符。 hashKey函数的注释表明了如何确定:
答案 2 :(得分:1)
如果没有轨道表达式,则会计算基于该值的哈希值。 使用轨道表达式,如果需要该级别的控制,可以提供自己的函数来计算哈希值。
<!DOCTYPE html>
<html>
<head>
<script data-require="angular.js@*" data-semver="1.3.0" src="//code.angularjs.org/1.3.0/angular.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body ng-controller="myCtrl">
<h1>User Defined Indexer</h1>
<ul>
<li ng-repeat="item in data track by getTracker()">{{item}}</li>
</ul>
<script>
var app=angular.module("app",[]);
app.controller("myCtrl",function($scope){
$scope.data=[1,2,3,4,5]
$scope.getTracker = function(v){
return Math.random();
}
});
angular.bootstrap(document,["app"]);
</script>
</body>
</html>