Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Change a value inside ng-repeat cycle with ng-click

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

like image 526
Claudio Ɯǝıs Mulas Avatar asked Dec 24 '22 08:12

Claudio Ɯǝıs Mulas


1 Answers

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';
    };
  });
like image 105
Pankaj Parkar Avatar answered Jan 08 '23 22:01

Pankaj Parkar