在查看有关SO的文档和众多问题之后,我无法找到解决问题的方法。我有一个下拉列表,其中填充了数据库中的数据。为了填补这一点,我使用了select as
方法的ngOptions。
<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
作为键的条目。
第二:Solved this with help from Icycool in their comment below.
当我持续打开和关闭填充表单大约一半的时间时,我得到默认值,而另一半我得到实际选择的值。这显然是因为当我从填充的表单中获取数据并且代码运行同步时,ng-model="modelthing"
被覆盖。有没有办法确保它运行异步?或者我的方法是否完全错误?
到目前为止我尝试过的其他事情:
我注意到,当我在ngOptions中使用select as item in items
词组时,我的select中的选项包含value="number:3"
而不是普通数字。 Using track by
in ngOptions而不是select as
修正了此问题,但我的选定值与下拉列表中的值不匹配,因此具有不可预见的影响,因为这些值是3
而不是number:3
1}}。
工作的解决方案,但感觉非常无意义且有点脏,是在modelthing
模型为空时检查表单初始化,如果是,请将其设置为默认值。
答案 0 :(得分:1)
使用id
比使用对象本身更容易管理。
<select ng-model="modelthing"
ng-options="item.id as item.description for item in categories">
$scope.categories = $http.get(thingurl)
.then(function (result) {
$scope.categories = result.data;
$scope.modelthing = 1; // your model is bound to id not the object
});
请注意,在这种情况下,integer
1
和string
"1"
可能不会被视为相同,它需要与JSON中返回的类型相匹配。
第2部分:您的意思是模型和选择来自不同的$http
来电吗?可以通过在应用默认值
function getData() {
$http.then(function(data) {
$scope.selections = data;
if (!$scope.selected) $scope.selected = data[0].id;
})
}
function getSelected() {
$http.then(function(data) {
$scope.selected = data.id;
})
}
通过这种方式,异步调用resolve之后的最终值将始终是检索到的id,无论顺序如何。
剩下的唯一小问题是默认值会显示片刻,直到真正的选定值返回。您可以保留此行为或隐藏选择,直到所选值返回。
答案 1 :(得分:0)
您需要在数组 (类别)中添加新对象(带负值或0)。
将最后一个对象分配给模型 (modelthing)对象。
请尝试以下代码(否则将其转到密钥)
$scope.categories = $http.get(thingurl)
.then(function (result) {
$scope.categories = result.data;
$scope.categories.Push(id:"0",description:"Select");
$scope.modelthing = $scope.categories[$scope.categories.length - 1];
});
<强>更新强>
1)这有两个问题,首先[1]选择json数据中的第二个条目,而不是选择1作为键的那个
索引数组从0开始,而不是1.因此,如果键看起来为1但索引值为0. 您正在使用数组而不是 arraylist 。有意义吗?
只需输入0而不是像
一样 $scope.categories[0].id
2)当我持续打开和关闭填充表单大约一半时间时,我得到默认值,而另一半我得到实际选择的值。这显然是因为当我从填充的表单中获取数据并且代码同步运行时,ng-model =“modelthing”会被覆盖。有没有办法确保它运行异步?或者我的方法是否完全错误?
只需使用空数据
全局声明模型对象$scope.categories = [];
$scope.modelthing = {};
更新2
3)我试图根据其键选择一个值,而不是它在数组中的位置,因为键不一定按升序排列在数组中
var key = 1; //it's not static
for( var i=0;i<$scope.categories.length;i++)
{
if($scope.categories[i].id==key)// Once your key is correct,then the value will be assign
{
$scope.modelthing = $scope.categories[i]
}
}