我使用 ng-options
创建了一个选择框,它从数据库中获取预先选择的值。
我的 HTML:
<h3>Process:</h3>
<select class="form-control"
ng-options="p.procid as p.procname for p in processes track by p.procid"
ng-model="processSelected">
<option value="">-- choose an option --</option>
</select>
我的 Controller :
$scope.processSelected = $scope.processes[2];
现在,它在选择框中显示为 MyProcess1
、MyProcess2
、MyProcess3
等。例如,如果默认值为 MyProcess3
,并且我想选择 MyProcess1
进程,则选择框将变为空白。当我第二次单击 MyProcess1
时,它会选择它。我没有找到任何双击的原因。
请告诉我如何让它通过单击进行选择。
最佳答案
我相信您对 ng-options
的查询过于复杂化。首先track by p.procid
用于ng-repeat
删除重复项,其中 <select>
不在乎。其次,你的p.procid as p.procname
打破了逻辑,因为它没有多大意义。
总的来说,您的代码应更改为 ng-options="p.procname for p in processes"
这是一个工作演示(没有后端请求):
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.processes = [{
"procid": 1,
"procname": "AAA"
},
{
"procid": 3,
"procname": "BBB"
},
{
"procid": 4,
"procname": "CCC"
},
{
"procid": 2,
"procname": "DDD"
},
];
$scope.processSelected = $scope.processes[2];
});
<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<body>
<div ng-app="myApp" ng-controller="myCtrl">
<h3>Process:</h3>
<select class="form-control" ng-options="p.procname for p in processes" ng-model="processSelected">
<option value="">-- choose an option --</option>
</select>
<p ng-show="processSelected">Selected: {{processSelected}}</p>
</div>
</body>
</html>
关于javascript - ng-options默认值需要双击选择一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50720671/