admin管理员组

文章数量:1394395

I want to change a value of an item inside an ng-repeat cycle using a function.

This for example won't work.

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';
};

Full example

I want to change a value of an item inside an ng-repeat cycle using a function.

This for example won't work.

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';
};

Full example

http://plnkr.co/edit/kobMJCsj4bvk02sveGdG

Share Improve this question edited Feb 26, 2016 at 11:43 Pankaj Parkar 136k23 gold badges240 silver badges303 bronze badges asked Feb 26, 2016 at 11:28 Claudio Ɯǝıs MulasClaudio Ɯǝıs Mulas 1,1123 gold badges15 silver badges24 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 10

When using controllerAs pattern, you should be using controller alias while accessing any variable from controller function. But that should be bounded to this context of controller.

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

Demo Here

Extended

Also keep in mind while using this keyword inside a controller factory function. You should assign this variable to some variable to ensure that this which you are using is not other this, look at 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';
    };
  });

本文标签: javascriptChange a value inside ngrepeat cycle with ngclickStack Overflow