从下拉列表中按其值选择一个选项-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处的返回值