У меня есть фабрика, которая извлекает параметры раскрывающегося списка из базы данных:
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:
<select ng-model="clinicsDDL.item" ng-options="item.name for item in clinicsDDL track by item.id" ngRequired />
Данные выпадающего списка, которые помещаются в $scope.clinicsDDL, выглядят следующим образом:
[{
"id": "19",
"name": "other clinic"
}, {
"id": "39",
"name": "My clinic"
}]
Возвращаемые пользовательские данные из БД выглядят так:
{
"__type": "User",
"FirstName": "Erik",
"LastName": "Grosskurth",
"DefaultLocationId": "39"
}
Внутри моего контроллера я заполняю раскрывающийся список/выбираю, а затем беру идентификатор пользователя и отправляю его в БД для информации о пользователе. Эта информация о пользователе возвращается. Затем я хочу выбрать конкретный параметр из ранее заполненного списка на основе того, что такое «DefaultLocationId», который возвращается из БД.
Как мне это сделать?
$scope.clinicsDDL.item = $scope.clinicsDDL[0];
^^^ не работает, потому что я не могу зависеть от того, чтобы массив всегда формировался одинаково. Мне нужно настроить таргетинг на элемент массива на основе «DefaultLocationId», а не целого числа.
В jQuery вы бы выбрали селектор, используя $('#clinicsDDL option[value="19"').doSomething();
Я думал, что в angular это будет примерно так:
$scope.clinicsDDL.item = $scope.clinicsDDL[value="19"];
^^^ но это тоже не работает