2015-12-10 3 views
2

Я пытаюсь достичь двойного вложенного объекта. (Пример ниже) Проблема в том, что мой текущий код генерирует массив внутри объекта.angularjs: ng-model double object

<div ng-if="newResultUnits()" ng-repeat="set in sets" ng-model="newexercise.sets[$index]"> 
        <label>Set {{$index+1}}</label> 
        <label> 
         <label> 
          <input type="text" ng-repeat="resultUnit in newResultUnits()" ng-model="newexercise.sets[$parent.$index][$index].value" placeholder="{{resultUnit.name}}"> 
         </label> 
        </label> 
       </div> 

Пример (имя атр добавляется позже):

{ 
     name:"MultiTest", 
     sets:[ 
      { 
      0:{ 
       value:"10", 
       name:"Kg" 
      }, 
      1:{ 
       value:"10", 
       name:"Wdh" 
      } 
      } 
     ] 
    } 

Вот как это должно быть: (Пожалуйста, обратите внимание на Doubble [[ и отсутствующую 0:)

{ 
     "name": "MultiTest", 
     "sets": [ 
     [ 
      { 
      "value": "10", 
      "name": "Kg" 
      }, 
      { 
      "value": "10", 
      "name": "Wdh" 
      } 
     ] 
     ] 
    } 

Im извините, если я перепутал массив и объект .. Спасибо!

+0

Что такое наборы изначально? – dfsq

+0

Привет, dfsq, спасибо за ваш ответ. $ scope.sets - это просто пустой массив. элементы будут перенаправлены на него, когда пользователь захочет добавить больше наборов. простая динамическая форма :) Или что вы имеете в виду? – orgertot

ответ

1

Необходимо правильно инициализировать структуры данных. Таким образом, в контроллере начать с

$scope.newexercise = { sets: [] }; 

Так Угловая знает, что вы хотите $scope.newexercise быть массивом. Затем в шаблоне использовать ngInit на каждом внутреннем цикле ng-init="newexercise.sets[$parent.$index] = []":

<div ng-repeat="set in sets"> 
    <label>Set {{$index+1}}</label> 
    <label> 
     <label> 
      <input type="text" 
        ng-repeat="resultUnit in newResultUnits()" 
        ng-init="newexercise.sets[$parent.$index] = []" 
        ng-model="newexercise.sets[$parent.$index][$index].value" 
        placeholder="{{resultUnit.name}}"> 
     </label> 
    </label> 
</div> 

Демо:http://plnkr.co/edit/s1rInT8rLg50ISsSVxyV?p=preview

+0

Вот и все! Большое спасибо! – orgertot

+1

Добро пожаловать. Вот еще один вариант, если вы планируете иметь больше полей во внутреннем повторе: http://plnkr.co/edit/OFpIPuGNgPGlPhZ3d1Qq – dfsq

+0

Спасибо большое! :) – orgertot

Смежные вопросы