跟踪嵌套的ng-repeat索引

时间:2016-11-28 19:23:15

标签: javascript angularjs

所以我有一个嵌套的ng-repeat,如下所示:

<div ng-repeat="data in flow" ng-init="$flowIndex = $index">

    Index: {{ $index }}
    <div ng-click="flow.splice($index, 1)">Delete me</div>

    <div ng-repeat="inside_data in flow[$flowIndex]">
        Inside index: {{ $index }}
    </div>

</div>

我希望能够删除$flowIndex中的索引。但是,如果我有这样的事情:

0 
1
2
3

我删除了索引2。如果我去删除索引3,则找不到它,因为ng-init变量仍然在索引3处,但实际上它不在索引2处。

有谁知道一项工作?

3 个答案:

答案 0 :(得分:2)

你可以摆脱$flowIndex,没有必要,你可以使用$parent.$index,当你使用ngRepeat时它会创建一个子范围而$index是其中的一部分该范围。还可以考虑将删除逻辑移动到控制器中。

控制器:

$scope.delete = function ($index) {
    $scope.flow.splice($index, 1);
};

HTML:

<div ng-repeat="data in flow">

    Index: {{ $index }}
    <div ng-click="delete($index)">Delete me</div>

    <div ng-repeat="inside_data in flow[$index]">
        Inside index: {{ $parent.$index }} -> {{ $index }}
    </div>
</div>

答案 1 :(得分:0)

我相信你可以这样得到父索引:

$parent.$index

如本回答所述:passing 2 $index values within nested ng-repeat

这样您就不必担心变量与当前状态不同步。

答案 2 :(得分:0)

我刚用一些虚拟数据字符串测试了你的类似代码,删除似乎有效。我对您的代码进行了一些更新,以便更好地分析它。

&#13;
&#13;
// Code goes here

var myApp = angular.module('myApp',[]);

myApp.controller('MyController', ['$scope', function($scope) {
  $scope.flow = [
    ["test01","test02","test03"],
    ["test11","test12","test13"],
    ["test21","test22","test23"],
    ["test31","test32","test33"],
    ["test41","test42","test43"]
  ]
  ;
}]);
&#13;
<!DOCTYPE html>
<html>

  <head>
    <script data-require="angularjs@1.5.8" data-semver="1.5.8" src="//opensource.keycdn.com/angularjs/1.5.8/angular.min.js"></script>
    <link rel="stylesheet" href="style.css" />
    <script src="script.js"></script>
  </head>
<body ng-app="myApp">
  <section ng-controller="MyController">
  <div ng-repeat="data in flow">
  
      Index: {{ $index }}
      <div ng-click="flow.splice($index, 1)">Delete me [{{ $index }}]</div>
  
      <div ng-repeat="inside_data in flow[$index]">
          Inside index: {{ $index }} : {{ inside_data }}
      </div>
      <hr>
  </div>
</section>
</body>
</html>
&#13;
&#13;
&#13;