Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 默认情况下,AngularJS ng如何重复跟踪项目?_Javascript_Angularjs_Angularjs Ng Repeat - Fatal编程技术网

Javascript 默认情况下,AngularJS ng如何重复跟踪项目?

Javascript 默认情况下,AngularJS ng如何重复跟踪项目?,javascript,angularjs,angularjs-ng-repeat,Javascript,Angularjs,Angularjs Ng Repeat,我知道您可以使用track by expr指定如何在ng repeat指令中键入项目 但是如果没有跟踪,AngularJS如何识别项目 例如,我是否可以通过更改对象来控制跟踪对象的方式,而不使用track by 从文档中: 如果未指定跟踪函数,则ng repeat将按集合中的标识关联元素 但这并不清楚。“集合中的标识”是什么意思?如果没有轨迹表达式,将计算基于该值的哈希。 如果您需要那种级别的控制,可以使用跟踪表达式提供自己的函数来计算散列 <!DOCTYPE html> <h

我知道您可以使用
track by expr
指定如何在
ng repeat
指令中键入项目

但是如果没有跟踪,AngularJS如何识别项目

例如,我是否可以通过更改对象来控制跟踪对象的方式,而不使用
track by

从文档中:

如果未指定跟踪函数,则ng repeat将按集合中的标识关联元素


但这并不清楚。“集合中的标识”是什么意思?

如果没有轨迹表达式,将计算基于该值的哈希。 如果您需要那种级别的控制,可以使用跟踪表达式提供自己的函数来计算散列

<!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>

用户定义索引器
  • {{item}
var-app=angular.module(“app”,[]); app.controller(“myCtrl”,函数($scope){ $scope.data=[1,2,3,4,5] $scope.getTracker=函数(v){ 返回Math.random(); } }); 引导(文档,[“应用程序]);
如果对对象关键点执行重复,则跟踪标识符就是关键点

e.g. ng-repeat="(key,value) in thingies"
对于数组,跟踪标识符是通过为每个数组项调用hashKey函数来确定的。hashKey函数的注释表示如何确定:

  • 字符串就是字符串
  • number是字符串形式的数字
  • 对象是对该对象调用$$hashKey函数的结果或唯一生成的id
  • 这也被分配给对象的$$hashKey属性

如果省略
track by
表达式,则默认情况下angular将按
$$hashkey
进行跟踪,angular会自动将其插入到对象列表中
$$hashkey
被称为集合的标识


您可以在此处找到更多信息

是否可以直接从对象提供我自己的哈希值,而不必使用
track by
?我基本上希望我的HTML模板不需要知道每次对象出现在
ng repeat
afaik中时如何识别它。默认设置是:它将expando属性$$hashKey注入到JavaScript对象中。请查看感谢您的链接。我也看到了。@tenfour所以也许track by对于散列没有那么有用?