我已经搜索了谷歌,在这个上面什么也找不到。

我有这个代码。

<select ng-model="somethingHere" 
        ng-options="option.value as option.name for option in options"
></select>

有这样的数据

options = [{
   name: 'Something Cool',
   value: 'something-cool-value'
}, {
   name: 'Something Else',
   value: 'something-else-value'
}];

输出是这样的。

<select ng-model="somethingHere"  
        ng-options="option.value as option.name for option in options" 
        class="ng-pristine ng-valid">

    <option value="?" selected="selected"></option>
    <option value="0">Something Cool</option>
    <option value="1">Something Else</option>
</select>

如何将数据中的第一个选项设置为默认值,从而得到这样的结果呢?

<select ng-model="somethingHere" ....>
    <option value="0" selected="selected">Something Cool</option>
    <option value="1">Something Else</option>
</select>

当前回答

接受的答案使用ng-init,但是文档说如果可能的话避免ng-init。

ngInit唯一合适的用法是对特殊属性进行混叠 ngRepeat,如下图所示。除了这个案子,你应该 使用控制器而不是ngInit来初始化作用域上的值。

你也可以使用ng-repeat来代替ng-options。使用ng-repeat,您可以使用ng-selected和ng-repeat的特殊属性。例如,$index, $odd, $even使其无需任何编码即可工作。

$first是ng-repeat的一个特殊属性。

  <select ng-model="foo">
    <option ng-selected="$first" ng-repeat="(id,value) in myOptions" value="{{id}}">
      {{value}}
    </option>
  </select>

----------------------编辑---------------- 虽然这是可行的,但我更喜欢@mik-t的答案,当您知道要选择什么值时,https://stackoverflow.com/a/29564802/454252,它使用track-by和ng-options,而不使用ng-init或ng-repeat。

这个答案只适用于当你必须选择第一项而不知道选择什么值时。例如,我正在使用这个自动完成,它需要一直选择第一个项目。

其他回答

试试这个:

HTML

<select 
    ng-model="selectedOption" 
    ng-options="option.name for option in options">
</select>

Javascript

function Ctrl($scope) {
    $scope.options = [
        {
          name: 'Something Cool',
          value: 'something-cool-value'
        }, 
        {
          name: 'Something Else',
          value: 'something-else-value'
        }
    ];

    $scope.selectedOption = $scope.options[0];
}

砰砰作响。

如果您真的想设置将绑定到模型的值,那么将ng-options属性更改为

ng-options="option.value as option.name for option in options"

和Javascript

...
$scope.selectedOption = $scope.options[0].value;

考虑到上述情况,这里又一个普伦克。

如果你使用ng-options来渲染你的下拉列表,那么默认选择与ng-modal值相同的选项。 请看下面的例子:

<select ng-options="list.key as list.name for list in lists track by list.id" ng-model="selectedItem">

所以option有相同的list值。key和selectedItem是默认选择。

Srivathsa Harish Venkataramana只有一个回答提到了轨道,这确实是一个解决方案!

下面是一个关于如何在select ng-options中使用track by的例子(链接如下):

<select ng-model="selectedCity"
        ng-options="city as city.name for city in cities track by city.id">
  <option value="">-- Select City --</option>
</select>

如果selectedCity定义在angular作用域上,并且它的id属性与cities列表中任何城市的id值相同,它将在加载时自动选择。

下面是普伦克的解释: http://plnkr.co/edit/1EVs7R20pCffewrG0EmI?p=preview

有关更多细节,请参阅源代码文档: https://code.angularjs.org/1.3.15/docs/api/ng/directive/select

使用下面的代码填充从您的模型中选择的选项。

<select id="roomForListing" ng-model="selectedRoom.roomName" >

<option ng-repeat="room in roomList" title="{{room.roomName}}" ng-selected="{{room.roomName == selectedRoom.roomName}}" value="{{room.roomName}}">{{room.roomName}}</option>

</select>

您可以像这样简单地使用ng-init

<select ng-init="somethingHere = options[0]" 
        ng-model="somethingHere" 
        ng-options="option.name for option in options">
</select>