【发布时间】:2016-11-15 18:20:53
【问题描述】:
查看有关 SO 的文档和大量问题后,我找不到解决问题的方法。我有一个下拉列表,其中填充了数据库中的数据。为了填补这一点,我使用 ngOptions 和 select as 方法。
<select ng-model="modelthing" ng-options="item.id as item.description for item in categories">
现在我想要的是一个默认选项(可以由管理员更改,因此它不能硬编码为<option>),如果之前没有选择任何值,并且当有一个值时选择值那些。
$scope.categories = $http.get(thingurl)
.then(function (result) {
$scope.categories = result.data;
//$scope.modelthing= $scope.categories[1].id;
$scope.modelthing= 1;
});
这样做有两个问题,首先[1]选择了json数据中的第二个条目,而不是1作为key的那个。
第二个:Solved this with help from Icycool in their comment below.
当我继续打开和关闭填充表单时,大约有一半的时间我得到默认值,另一半得到实际选择的值。这显然是因为ng-model="modelthing" 在我从填充表单中获取数据并且代码同步运行时被覆盖。有没有办法确保它异步运行?还是我的方法完全错误?
到目前为止我尝试过的其他事情:
我注意到当我在 ngOptions 中使用 select as item in items 短语时,我的选择中的选项有一个 value="number:3" 而不是一个普通的数字。 Using track by in ngOptions 而不是 select as 解决了这个问题,但有不可预见的影响,我选择的值与下拉列表中的值不匹配,因为这些是普通的 3 而不是 number:3。
一个确实工作的解决方案是,如果modelthing 模型为空,则检查表单初始化是否为空,如果是,则将其设置为默认值.
【问题讨论】:
-
用你的 json 数据更新帖子。
标签: angularjs ng-options