ng-модель в ng-repeat не обновляет эталонный объект - PullRequest
0 голосов
/ 29 августа 2018

В моем контроллере у меня есть объект:

$scope.selectedMap = {
    map: '', mapDesc: '', stops_json: "", stopLength: []
};

Клавиша stop_json в этом объекте содержит другой объект, который выглядит следующим образом:

{
  desc: "PRG-BUD-HR-PAY",
  stop1:"DEPT",
  stop2:"ACCT",
  stop3:"ACCT2",
  stop4: 158,
  stop5:"CCT",
  stop6:"CCA",
  stop7: 156
}

Я использую этот дочерний объект в ng-repeat и генерирую с ним входные данные для каждой остановки:

<p class="row col-md-12">
  <strong>Description:&nbsp;</strong>{{ selectedMap.stops_json.desc }}
</p>
<div class="row col-md-12 float-left">
    <md-input-container ng-repeat="stop in selectedMap.stops_json" ng-if="!$first" ng-model="stop" class="col-md-12">
        <label>Stop&nbsp;{{ $index }}:</label>
        <input class="col-md-8 float-left mapStops" ng-model="stop" aria-label="Route Stop Description">
    </md-input-container>
</div>

Моя проблема в том, что при изменении значения входных тегов объект stop_json не изменяется. У меня сложилось впечатление, что это должно было быть, так как это объект, который моделируется. Я явно ошибаюсь, кто-нибудь может научить меня?

1 Ответ

0 голосов
/ 29 августа 2018

Несколько проблем, о которых стоит упомянуть в первую очередь:

  • Обозначение для перебора объектов с ng-repeat: (key, value) in obj
  • Если вы решите использовать итерацию объекта с ng-repeat, тогда ваша ng-if, зависящая от $first, будет недетерминированной (т.е. итерация в порядке определения ключа не гарантируется)
  • Применение привязки ng-model к ng-repeat с намерением сделать его составляющие редактируемыми неправильными - модели каждого элемента должны иметь ng-model, применяемые вместо

Я создал урезанный пример вашего фрагмента, чтобы продемонстрировать, как повторяющиеся входные данные могут изменять модель stops_json.

См. Здесь.

По сути, вам необходимо убедиться, что элементы input внутри ng-repeat напрямую связаны с вашей моделью stops_json, чтобы любые изменения повлияли на нее.

Кроме того, обратите внимание, что все любые числовые свойства должны использовать type="number" вариант input, в противном случае любые изменения будут устанавливать значения в виде строк.

...