Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在ng选项中选择默认值_Javascript_Angularjs_Ng Options_Angular Ngmodel - Fatal编程技术网

Javascript 在ng选项中选择默认值

Javascript 在ng选项中选择默认值,javascript,angularjs,ng-options,angular-ngmodel,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> &l

我有以下代码和信息:

$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>
但我的问题是选项是在指令中创建的,此时我不知道1有多少个值包含$scope.options,也不知道2数据库中所选选项的索引是什么。我只知道对象中的id

我的指令的html如下所示:

<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>
<select ng-switch-when="select" ng-model="form.model[element.model]" ng-options="{{element.rule}}"></select>
并且element.options具有带有选项的数组,form.model[element.model]具有所选选项的id


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

启动控制器时只需设置正确的型号值。如果您知道ID,则可以使用以下命令轻松获得正确的数组值:


在我看来,代码的问题在于,从数据库中输出的“selected”值是所选对象的ID,而不是对象本身。这很好,但由于这种差异,您不能简单地设置

$scope.selected = 2 //assuming 2 is the value coming from your database
因为选项数组中不存在值“2”。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标识对象


这个问题的答案对您需要进行的数据处理类型有很好的描述,并提供了关于javascript对象的更多信息。

a+用于过滤器思想。我只是从angular开始,还没有太多地使用它们,所以我甚至没有想到它。
$scope.selected = $filter('filter')($scope.options, {id: 2})[0];
$scope.selected = 2 //assuming 2 is the value coming from your database
$scope.options = [
    { id: 1, label: "My label" },
    { id: 2, label: "My label 2" }
];
var selectedIdFromDatabase = 2;
$scope.selected = $scope.options[selectedIdFromDatabase-1];