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

    2.2k Views Asked by At

    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

    1

    There are 1 best solutions below

    0
    Pankaj Parkar On BEST ANSWER

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