我在两个嵌套ng-repeat
中都使用了相应的$index
。因此,为了便于阅读,我重新命名了#34;使用ng-init
的第一个$索引(即:ng-init="backupIndex = $index"
)。在起点,任何人都很好,backupIndex
总是等于$index
。
问题是,如果我从绑定到ng-repeat
的集合中移除元素,则backupIndex
与$index
不同步。
这是plunker。如何保持$index
和backupIndex
同步?
答案 0 :(得分:1)
如果你可以省略ng-init
部分和
<ul ng-repeat="value in values">
<span style="display: none"> {{ backupIndex = $index }}</span>
<li>backUp: <b>{{backupIndex}}</b> $index: <b>{{$index}}</b> <button ng-click="rem(backupIndex)">Remove</button></li>
</ul>
<span style="display: none"> {{ backupIndex = $index }}</span>
此行会指定backupIndex
$index
的值,并会与$index
同步
这是DEMO
<ul ng-repeat="value in values" ng-init="backupIndex = $index">
ng-init
将仅首次执行,它将创建名为ng-repeat
的{{1}}子范围变量,并为其指定值backupIndex
和{ {1}}与$index
不同步。
backupIndex
这是$index
的{{1}}指令。它的作用是获取var ngInitDirective = ngDirective({
priority: 450,
compile: function() {
return {
pre: function(scope, element, attrs) {
scope.$eval(attrs.ngInit);
}
};
}
});
中的表达式并在当前作用域上执行表达式并返回结果。
在这种情况下:angular.js
表达式为ng-init
,然后在ng-init
(ng-init
表达式为backupIndex = $index
)行scope.$eval(attrs.ngInit);
表达式在attrs.ngInit
范围内执行。这意味着此时在backupIndex = $index
的范围内有一个名为backupIndex = $index
的变量,其值为ng-repeat
,而且就是它。
答案 1 :(得分:0)
您不需要将第一个索引重命名为backupIndex,因为每个ng-repeat都会创建一个新范围,如果您在第二个ng-repeat内,并且想要达到第一个索引,那么您需要做的就是使用
访问它$parent.$index