从下拉列表中按其值选择一个选项-Angularjs
我有一个从数据库中提取下拉选项的工厂:从下拉列表中按其值选择一个选项-Angularjs,angularjs,drop-down-menu,html-select,angular-ngmodel,angularjs-ng-options,Angularjs,Drop Down Menu,Html Select,Angular Ngmodel,Angularjs Ng Options,我有一个从数据库中提取下拉选项的工厂: app.factory('populateDDL', function($http) { 'use strict'; return function (tbl,key) { var json, data = JSON.stringify({ sKey: key, sTableName: tbl });
app.factory('populateDDL', function($http) {
'use strict';
return function (tbl,key) {
var json,
data = JSON.stringify({
sKey: key,
sTableName: tbl
});
return $http.post('util.asmx/populateDDL',data).
then(function(response) {
return JSON.parse(response.data.d);
});
};
});
然后,我将该数据应用于控制器中的下拉列表/选择:
app.controller('userSettings', function($scope, $http, populateDDL) {
$scope.clinicLocations = new populateDDL('locations',key).
then(function(response) {
console.log(response);
$scope.clinicsDDL = response.locations;
$http({
url: 'util.asmx/returnUser',
method: 'POST',
data: {sUserId: uid},
})
.success(function(user) {
$scope.user = user.d;
})
.error(function(data, status, headers, config) {
console.log(data+', '+status+', '+headers+', '+config);
});
});
});
以下是选择标记的外观:
<select ng-model="clinicsDDL.item" ng-options="item.name for item in clinicsDDL track by item.id" ngRequired />
从数据库返回的用户数据如下所示:
[{
"id": "19",
"name": "other clinic"
}, {
"id": "39",
"name": "My clinic"
}]
{
"__type": "User",
"FirstName": "Erik",
"LastName": "Grosskurth",
"DefaultLocationId": "39"
}
$scope.clinicsDDL.item = $scope.clinicsDDL[value="19"];
在我的控制器中,我填充下拉列表/选择,然后获取用户ID并将其提交给DB以获取用户信息。此用户信息将返回。从那时起,我想根据从DB返回的DefaultLocationId,从先前填充的列表中选择一个特定选项
我该怎么做呢
$scope.clinicsDDL.item = $scope.clinicsDDL[0];
^^^不起作用,因为我不能依赖数组总是以相同的形式形成。我需要基于DefaultLocationId而不是整数来定位数组项
在jQuery中,您可以使用$'clinicsDDL option[value=19]以选择器为目标
我在想,在这种情况下会是这样的:
[{
"id": "19",
"name": "other clinic"
}, {
"id": "39",
"name": "My clinic"
}]
{
"__type": "User",
"FirstName": "Erik",
"LastName": "Grosskurth",
"DefaultLocationId": "39"
}
$scope.clinicsDDL.item = $scope.clinicsDDL[value="19"];
^^^但是这也不起作用,预选仅使用引用。当您想要选择一个元素而不知道哪个字段包含它时,您必须搜索它。您应该使用lodash的查找功能,而不是使用array.filter _.find…将在找不到任何项时返回undefined。因此您可以将其保留为undefined或使用默认值,如
$scope.clinicsDDL.item = _.find($scope.clinicsDDL, {DefaultLocationId : 39}) || $scope.clinicsDDL[0];
angular.js:13424 ReferenceError:u未定义您必须在项目和html中包含lodash。请参阅。这不是angular解决方案。我还可以在其他插件中完成一行修复。我正在寻找纯angular解决方案,谢谢您,然后您可以使用array.filter。这种方法是纯javascript。缺点是t函数调用将迭代数组的所有元素并返回一个新数组。当您不想使用纯Javascript并强制使用AngularJS解决方案时,可以使用筛选器。将$filter服务注入控制器并调用$filterfilter$scope.clinicsDDL,{DefaultLocationId:39}在这里,同样的缺点是,您迭代数组中的所有元素。不要忘记它返回一个数组。当id唯一时,您无法访问索引0处的返回值