在ng-options中选择默认值

时间:2014-08-09 19:35:37

标签: javascript angularjs ng-options angular-ngmodel

我有这些代码和信息:

$scope.options = [
  { id: 1, label: "My label" },
  { id: 2, label: "My label 2" }
];
$scope.selected = 2;

<select ng-options="opt.label for opt in options" ng-model="selected">
  <option value="">Select one</option>
</select>

但是,选项的创建方式如下:

<select ng-options="opt.label for opt in options" ng-model="selected">
  <option value="">Select one</option>
  <option value="0">My label</option>
  <option value="1">My label 2</option>
</select>

如何将所选选项设置为我的标签2?我知道可以做到:

$scope.selected = $scope.options[1];

但是我的问题是选项是在指令中创建的,那时我不知道1)有多少值$scope.options,还有2)所选选项的索引是什么数据库。我唯一知道的是id(在对象中)。

我的指令的html是这样的:

<select ng-switch-when="select" ng-model="form.model[element.model]" ng-options="{{element.rule}}"></select>

element.rule的位置:

rule: "role.role for role in element.options"

element.options包含带有选项的数组,form.model[element.model]具有所选选项的ID。

如何在数组$scope.options中获取ID为X的元素的索引?我非常肯定会给我解决方案,但我不知道怎么做......

2 个答案:

答案 0 :(得分:9)

启动控制器时,只需设置正确的型号值即可。如果您使用filter

知道ID,则可以轻松获取正确的数组值
$scope.selected = $filter('filter')($scope.options, {id: 2})[0];

答案 1 :(得分:0)

我认为您的代码问题在于选择了&#39;来自数据库的值是所选对象的ID,而不是对象本身。这很好,但由于这种差异,你不能简单地设置

$scope.selected = 2 //assuming 2 is the value coming from your database

因为价值&#39; 2&#39;您的选项数组中不存在。 ID为2的对象可以。

如果您始终可以保证选项数组中的选项是1-n且按此顺序,则只需使用此选项即可完成此操作:

$scope.options = [
    { id: 1, label: "My label" },
    { id: 2, label: "My label 2" }
];
var selectedIdFromDatabase = 2;
$scope.selected = $scope.options[selectedIdFromDatabase-1];

如果你不能做出这样的保证(即使你现在可以在你的代码中做出这个假设也不是一个好主意)你需要迭代你的对象数组必须从数据库中识别具有selectedId ID的对象。

this question的答案对于您需要执行的数据处理类型以及有关javascript对象的更多信息有一个很好的说明。