我有这些代码和信息:
$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的元素的索引?我非常肯定会给我解决方案,但我不知道怎么做......
答案 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对象的更多信息有一个很好的说明。