在ng-repeat中,ng-click不会改变HTML中的值

时间:2014-11-01 09:43:44

标签: javascript angularjs

所以我不知道这是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。为什么呢?

1 个答案:

答案 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.badClickx不在ng-repeat范围内,那么它会检查下一个顶级范围中的x,如果您需要更多,请检查{ {1}}这是一个很好的演示,link


您也可以使用prototypical inheritance来引用父属性,这样也可以,

$parent