Угловое добавление элемента в повторяющийся массив

0

У меня проблема с динамическим добавлением элементов в массив, который служит моделью для ng-repeat.

Плункер находится здесь: http://plnkr.co/edit/W4b34EDR8dP7ems7aFRV?p=preview

У меня есть список строк таблицы. В каждой строке находится поле выбора, содержимое которого одинаково для каждой строки. Ng-модель для выбора - это просто строка, которая действует как элемент в первом ng-повторе (сложнее объяснить, чем просто посмотреть на plunker!)

Моя проблема заключается в том, когда я нажимаю кнопку, чтобы добавить строку. Следуй этим шагам:

  1. Нажмите "Добавить фазу". Появится новая строка с пустым значением
  2. Выберите что-то в новой строке
  3. Нажмите "Добавить фазу" еще раз.

Добавлена новая строка, но выбор будет удален из третьей строки. Почему это происходит и как я могу избежать этого? Конечно, я пытался Google, но трудно найти слова для google.

Вот какой код:

    <tr ng-repeat="phase in phases track by $index">
        <td>{{$index + 1}}</td>
        <td><select ng-model='phase'>
              <option ng-repeat="item in availablePhases" ng-value="item">{{item}}</option>
            </select>
        </td>
    </tr>

И контроллер:

app.controller('MainCtrl', function($scope) {
  $scope.name = 'World';
  $scope.phases = ['Phase 1', 'Phase 2'];
  $scope.availablePhases = ['Phase 0', 'Phase 1', 'Phase 2', 'Phase 3'];

  $scope.add = function() {
    $scope.phases.push('');
  }
});

Благодарю!

Теги:
angularjs-ng-repeat
ng-repeat

1 ответ

2
Лучший ответ

Вы даете все значения той же model, поэтому, обновляя их, вы обновили их все. Я не уверен, почему это не изменило первые два. Чтобы заставить его работать, просто измените

<select ng-model='phase'>

в

<select ng-model='phases[$index]'>

  • 0
    Интересно. Я неправильно предположил, что «фаза в фазах ...» означала бы, что я мог бы использовать «фазу» в качестве переменной цикла, вроде «for (String s: allStrings) ...». Большое спасибо за ваш ответ!
  • 0
    Я в этом ошибся по причине. На самом деле я думаю, что «фаза» была временной ссылкой в ng-repeat, когда обновленная область действия теряла ссылку, но это все еще не объясняет, почему первые два никогда не менялись.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню