【问题标题】:ng-click doesn't change value in HTML when in ng-repeat [duplicate]在 ng-repeat 中时,ng-click 不会更改 HTML 中的值 [重复]
【发布时间】:2014-12-28 13:24:51
【问题描述】:

所以我不知道这是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>

这是这两种情况的Plunker。为什么?

【问题讨论】:

  • 所以解决方案似乎是"ng-click="$parent.badClick = $index""
  • @MarvinSmit,是的,我正在阅读该页面。实际上,我更喜欢 Kalhano 的解决方案,因为它不依赖 $parent 以及那里提到的问题。
  • @E.H.B,谢谢。但我真的很喜欢下面的答案,因为我只是在更新活动索引,我宁愿将它保留在 HTML 页面本身中
  • @Kousha 是的,这真的很好

标签: javascript angularjs


【解决方案1】:

你可以像下面这样修复它,

在 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,如果你需要更多,请检查 prototypical inheritance 这是一个很好的演示,link


您也可以使用$parent 来引用父属性,所以这也可以,

<span ng-repeat="item in items track by $index" ng-click="$parent.badClick = $index">

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-24
    • 2015-09-13
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多