跟踪嵌套的ng-repeat索引
问题:keeping track of nested ng-repeat index's的问题出现的原因是什么?
在给定的代码中,ng-repeat指令被嵌套使用,导致在内部循环中无法正确跟踪索引。这是因为ng-repeat指令在内部循环中使用的索引是外部循环的索引,而不是内部循环的索引。因此,无法准确地获取内部循环的索引。
解决方法:keeping track of nested ng-repeat index's问题的解决方法是什么?
为了解决这个问题,可以通过在内部循环中引入一个自定义的变量来跟踪内部循环的索引。这样就可以准确地获取内部循环的索引。
以下是修改后的代码示例:
<!DOCTYPE html> <html> <head> <script data-require="angularjs.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 data track by $index"> Inside index: {{ $index }} : {{ inside_data }} </div> <hr> </div> </section> </body> </html>
在修改后的代码中,我们使用了"data track by $index"来追踪内部循环的索引。这样,我们就可以正确地获取内部循环的索引。
现在,当删除内部循环中的数据时,索引将正确更新,并且删除操作将按预期工作。
问题的出现原因是在嵌套的`ng-repeat`中,当需要跟踪索引时,使用了错误的变量`$parent.$index`。实际上,在`ng-repeat`中,它会创建一个子作用域,并且`$index`是该作用域的一部分。因此,不需要使用`$flowIndex`,可以使用`$parent.$index`代替。
解决方法是将删除逻辑移动到控制器中,并在控制器中定义一个函数`$scope.delete`,接受一个参数`$index`,然后使用`$scope.flow.splice($index, 1)`来删除指定索引的元素。
在HTML中,使用嵌套的`ng-repeat`来展示数据,并在需要跟踪索引的地方使用`$index`即可。删除按钮的点击事件调用`delete`函数,并传递当前索引作为参数。
以下是修改后的代码示例:
Index: {{ $index }}Delete meInside index: {{ $index }}
$scope.delete = function ($index) { $scope.flow.splice($index, 1); };
经过修改后,代码可以正常运行,并且在嵌套的`ng-repeat`中正确地跟踪索引。