Изменить значение внутри цикла ng-repeat с помощью ng-click

Я хочу изменить значение элемента в цикле 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 псевдоним при доступе к любой переменной из функции контроллера. Но это должно быть ограничено this контекст controller,

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

Демо Здесь

расширенный

Также имейте в виду при использовании this ключевое слово внутри фабричной функции контроллера. Вы должны назначить this переменная к некоторой переменной, чтобы гарантировать, что this который вы используете не другой this, посмотри на this проблема, связанная с контекстом.

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';
    };
  });
Другие вопросы по тегам