3

我有以下对象:

defaults = {
0 : {
    id : 10,
    value : "string 1"
    },
1 : {
    id : 22,
    value : "string 2"
    }
}

我想遍历这个对象并将其显示为一个选择框。

<select ng-model="selectedValue" ng-options="obj.id as obj.value for obj in defaults">
   <option value="">---Select option-----</option>
</select>

我想要实现的是默认选择“字符串 2”。但它不起作用。我遇到的问题是 selectedValue 是一个字符串:

$scope.selectedValue = "string 2";

从我从文档中了解到的 selectedValue 必须是同一个对象。但不幸的是,这是不可能的。在我的情况下 selectedValue 必须是一个字符串。换句话说我只需要使用选项的名称来操作,我不关心id。我尝试使用 ng-repeat。它甚至可以工作,但显示一个空选项,我认为使用 ng-repeat 不是一个好方法。

任何建议将不胜感激。

4

4 回答 4

2

选择的值应该是 id;

 $scope.selectedValue = 22;

演示

编辑:

更改模板

 <select ng-model="selectedValue" >
   <option value="">---Select option-----</option>
   <option ng-selected="selectedValue == obj.value" value="{{obj.value}}" ng-repeat="obj in defaults">{{obj.value}}</option>
 </select>

请参阅更新的演示

于 2014-04-27T07:49:31.210 回答
2

如果您希望selectedValue变量包含值而不是 ID,那么您不应该使用obj.id as obj.value, 而是obj.value as obj.value.

于 2014-04-27T08:13:46.323 回答
0

我认为您误解了文档。

选择的值应该是指同一个对象的值,而不是对象本身。

因此,您可以将默认值设置为:

$scope.selectedValue = $scope.defaults[1].value;

这样,将设置默认值 - 值是字符串还是数字都没有关系。

于 2014-04-27T08:04:21.503 回答
0

如果您将 ng-repeat 与选项一起使用,则需要在选项标签上使用 on-last-repeat。例如选择 name="repeatSelect" id="repeatSelect" ng-model="usertypes.SelectedId"

option ng-repeat="option in usertypes.AvailableOptions" value="{{option.Id}}" ng-selected="option.Id === usertypes.SelectedId" on-last-repeat>{{option.Name} }

选择

于 2016-09-13T15:24:03.410 回答