2017-02-17 3 views
0

Работает следующий код. Мой вопрос: правильно ли это сделать.Использование элемента AngularJS для установки переменной в объект вместо строки

Переменная устройство представляет собой массив объектов, и когда пользователь выбирает одну переменный selDev получает значение одного из этих объектов. Если я сделаю selDev модель через атрибут ng-model, то он получит строку, а не оригинальную модель.

<p> 
     <label>Device Id:</label> 
     <select ng-model="selDevIndex" 
      ng-change="selDev = devices[selDevIndex]"> 
      <option value="">(no device)</option> 
      <option ng-repeat="device in devices " 
        value="{{$index}}"> 
       {{device.id}}: {{device.type}} {{device.mfr}} 
       {{device.serial}} 
      </option> 
     </select> 
    </p> 

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

ответ

1

Вы можете использовать ng-options

HTML:

<select ng-model="selectedModel" 
      ng-options="device as device.text for device in devices track by device.id"> 
    </select> 

CONTROLLER:

$scope.selectedModel; 
$scope.devices = [{ 
    id: 1, 
    text: "Device1" 
}, { 
    id: 2, 
    text: "Device2" 
}]; 

Проверить это jsFiddle
Если вы должны перебираем n вместо массива, проверьте это post

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