使用 ng-click 更改 ng-repeat 循环内的值

Posted

技术标签:

【中文标题】使用 ng-click 更改 ng-repeat 循环内的值【英文标题】:Change a value inside ng-repeat cycle with ng-click 【发布时间】:2016-06-09 14:20:50 【问题描述】:

我想使用函数在 ng-repeat 循环中更改项目的值。

这个例子是行不通的。

html

<ul class="unstyled">
  <li ng-repeat="todo in todoList.todos">
      <span>todo.name</span>
      <button ng-click="example(todo)">Change me</button>
  </li>
</ul>

JS

$scope.example = function(v) 
  v.name = 'i am different now';
;

完整示例

http://plnkr.co/edit/kobMJCsj4bvk02sveGdG

【问题讨论】:

【参考方案1】:

当使用controllerAs 模式时,您应该在从控制器函数访问任何变量时使用controller 别名。但这应该限制在controllerthis 上下文中。

<button ng-click="todoList.example(todo)">Click me</button>

Demo Here

扩展

在控制器工厂函数中使用 this 关键字时也要记住。您应该将this 变量分配给某个变量,以确保您使用的this 不是其他this,请查看this context related issue

angular.module('todoApp', [])
  .controller('TodoListController', function() 
    var toList = this;
    toList.todos = [name:'test 1',name:'test 2'];
    toList.example = function(v) 
      v.name = 'ora bene';
    ;
  );

【讨论】:

以上是关于使用 ng-click 更改 ng-repeat 循环内的值的主要内容,如果未能解决你的问题,请参考以下文章

angular 中父元素ng-repeat后子元素ng-click失效

Angular / Javascript - 重新加载ng-repeat数据后更改类

在 ng-repeat 中为 ng-click 查找范围

ng-repeat 中的表单名称并将 ng-click 函数中的表单名称传递给 javascript

在 ng-repeat 中向 ng-click 函数添加参数似乎不起作用

ng-repeat 内的 ng-click 不适用于 :focus 和 display