Arrays AngularJS中2D数组中的表

Arrays AngularJS中2D数组中的表,arrays,angularjs,2d,Arrays,Angularjs,2d,我一直在期待AngularJS能够开箱即用,没有任何问题,但奇怪的是 我使用的JSON服务以2D数组的形式返回数据: $scope.data= [ ["val-11", "val-12", "val-13"], ["val-21", "val-22", "val-23"] ]; 我正试图从中生成如下表: <table> <tr ng-repeat="row in data"> <td ng-repeat="col in row">{{

我一直在期待AngularJS能够开箱即用,没有任何问题,但奇怪的是

我使用的JSON服务以2D数组的形式返回数据:

$scope.data= [
    ["val-11", "val-12", "val-13"],
    ["val-21", "val-22", "val-23"]
    ];
我正试图从中生成如下表:

<table>
<tr ng-repeat="row in data">
<td ng-repeat="col in row">{{col}}</td>
</tr>
</table>

{{col}}
我不明白为什么AngularJS不能处理这样一个基本的场景。我可以为父循环获取正确的$index,如果需要,我可以遍历这些值,但只能使用一个类似于“col in data[0]”的循环,但如果尝试使用如上所示的嵌套循环,则无法获得任何结果


我做错什么了吗?这似乎太基本了,不可能马上奏效。请有人帮我解决这个奇怪的问题。

在Angular 1.0.x中,ng repeat指令有许多错误,原因是试图“猜测”是否添加、删除或移动了非对象值(即字符串或数字)。 问题是,非对象本身没有标识,因此不可能准确跟踪它们。这在许多情况下都是有问题的,并且还导致ngRepeat代码因大量的变通方法和边缘情况而膨胀

在1.2中,我们改进了ng repeat的语法,允许开发人员自己精确地指定如何识别集合中的项。这是通过“跟踪方式”关键字完成的。这样做的一个结果是,我们不允许具有相同标识符的项

默认情况下,ng repeat将尝试按项目的值进行跟踪。如果您有重复的项,例如相同的对象或相同的字符串或数字,则ng repeat将发出投诉,您将在控制台中看到错误

var TableCtrl = function($scope) {
  $scope.data= [
    ["", "", "val-13"]
  ];
}
在这里,子数组中的前两项是相同的“空”字符串。看这把小提琴:

如果确实希望集合中有重复项,则需要提供一种方法来区分它们。最简单、最明显的方法是按项目在集合中的位置跟踪项目。这是通过使用“按$index跟踪”来完成的。以下是相同的示例,但以这种方式修复:

<table ng-controller="TableCtrl">
  <tr ng-repeat="row in data">
    <td ng-repeat="col in row track by $index">
       {{$parent.$index}}-{{$index}} {{col}}
    </td>
  </tr>
</table>

{{$parent.$index}}-{{$index}}{{{col}}


所以这不是AngularJS中的bug。但你是对的,当升级到1.2时,人们应该意识到这一变化对我来说很好:我发现了问题(见下文),它只是一个普通的bug。很遗憾有人否决了我的问题,这对AngularJS团队来说是一个需要解决的严重问题。你应该在控制台中看到一个错误,链接到Yes,下面的语法似乎适用于1.2 RC2:{{col}。但它在早期发布的版本中不起作用,这意味着它是一个突破性的特性。谢谢你指出这一点。不过,我确实喜欢它在早期版本中的工作方式,因为这是任何人都希望它能够工作的。