使用AngularJS select元素将变量设置为对象而不是字符串

时间:2017-02-17 00:49:28

标签: angularjs

以下代码有效。我的问题是这是否是正确的做法。

变量设备是一个对象数组,当用户选择一个时,变量 selDev 会被设置为其中一个对象。如果我通过 ng-model 属性设置 selDev 模型,那么它会获得一个字符串,而不是原始模型。

    <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 个答案:

答案 0 :(得分:1)

您可以使用ng-options

<强> HTML:

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

<强>控制器:

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

检查jsFiddle
如果必须循环对象而不是数组,请检查此post