所以我不知道这是AngularJS的问题,还是我的理解。
在我的应用中,我有一个ng-repeat
,我需要跟踪有效的$index
,当您点击其他项目时可以更改该<body ng-init="active = -1">
<span ng-repeat="item in items" ng-bind="item" ng-click="active = $index"></span>
</body>
。所以我想我会做类似的事情:
ng-click
但这不起作用;我知道如果我将ng-click="select($index)
更改为ng-repeat
并在我的控制器中应用更改,这将有效。但我想知道为什么上面的实现不起作用。
有趣的是,如果你没有<body ng-init="active = -1">
<span ng-click="active = 0">Item 1</span>
<span ng-click="active = 1">Item 2</span>
...
</body>
,这就可以了,即:
{{1}}
以下是这两种情况的Plunker。为什么呢?
答案 0 :(得分:3)
你可以像下面那样解决这个问题,
HTML中的
<span ng-repeat="item in items track by $index" ng-click="x.badClick = $index"> // x.badClick
控制器上的
$scope.x = {};
那是因为它为每个重复创建了新范围,reference ,,
参考说,
Each template instance gets its own scope, where the given loop variable is set to the current
如果您喜欢x.badClick
,x
不在ng-repeat范围内,那么它会检查下一个顶级范围中的x
,如果您需要更多,请检查{ {1}}这是一个很好的演示,link
您也可以使用prototypical inheritance
来引用父属性,这样也可以,
$parent