Заполнение Dropdown 2 на основе выбора Dropdown 1
Я могу заполнить 2 выпадающих меню непосредственно из базы данных. Моя проблема заключается в том, что 2-ые значения выпадающего списка должны быть заполнены на основе первого выпадающего списка. Поскольку я новичок в Angular, я не могу это понять, может кто-то помочь мне в этом.
<select id="OfficeId" name="OfficeId" ng-model="item.OfficeId"
ng-options="item.OfficeId as item.OfficeName for item in Offices">
<option value="" selected>Select the Office</option>
</select>
<select id="OBJ" name="OBJ" ng-model="item.OfficeOBJId"
ng-options="item.OfficeOBJId as item.OBJId for item in Codes">
<option value="" selected>Select OBJ Code</option>
</select>
myApp.factory('OfficeNames', function ($resource) {
return $resource(
'api/Office/:id',
{ id: '@id' },
{ update: { method: 'PUT' } }
);
});
myApp.factory('OfficeObjCode', function ($resource) {
return $resource(
'api/OfficeObj/:id',
{ id: '@id' },
{ update: { method: 'PUT' } }
);
});
function OfficeCtrl($scope, $location, OfficeNames) {
$scope.Offices = OfficeNames.query();
}
function OfficeObjCtrl($scope, $location, OfficeObjCode) {
$scope.Codes = OfficeObjCode.query();
}
Примечание. Я использую Web API/ Angular/Petapoco/SQL Server
Ответы
Ответ 1
Для этого вам не нужны 2 контроллера, на самом деле это, вероятно, одна из проблем.
Как только они находятся в одном и том же объеме, вы можете легко связать их вместе. Используйте ng-change
в первом параметре, чтобы вызвать функцию, которая получает значения для заполнения второй опции.
Пример скрипта: http://jsfiddle.net/TheSharpieOne/Xku9z/
Кроме того, вы можете использовать ng-show
со второй длиной массива опций выбора, чтобы отображать только второй выбор, когда он был заполнен.
Пример скрипта: http://jsfiddle.net/TheSharpieOne/Xku9z/1/
Ответ 2
Сделайте это так:
<select id="OfficeId" name="OfficeId" ng-model="item.OfficeId"
ng-options="item.OfficeId as item.OfficeName for item in Offices" ng-change="updateObjects(item.OfficeId)">
<option value="" selected>Select the Office</option>
<select id="OBJ" name="OBJ" ng-model="item.OfficeOBJId"
ng-options="item.OfficeOBJId as item.OBJId for item in Codes">
<option value="" selected>Select OBJ Code</option>
С javascript вам нужен только один контроллер, офисный контроллер:
angular.module('myApp',[])
.controller('OfficeCtrl',
['$scope','$location','OfficeNames','OfficeObjCode',function($scope,
$location, OfficeNames,OfficeObjCode)
{
$scope.Offices=OfficeNames.query();
$scope.updateObjects =function(office_id)
{`// take {{office_id}} to server to pick codes based
//on that office id and
// then assign them to $scope.codes..`
$scope.Codes = 'what you came back with';
}
}).factory('OfficeNames', function ($resource) {
return $resource(
'api/Office/:id',
{ id: '@id' },
{ update: { method: 'PUT' } }
);
}).factory('OfficeObjCode', function ($resource) {
return $resource(
'api/OfficeObj/:id',
{ id: '@id' },
{ update: { method: 'PUT' } }
);
});
Ответ 3
Я реализовал как следующий, надеюсь, это поможет:)
Код контроллера
var app = angular.module("app",[]);
app.controller("ctrl",function($scope){
$scope.key_options = [
{table:"Table_1",key:"age_flg",key_label:"Age"},
{table:"Table_1",key:"ethnicity_flg",key_label:"Ethnicity"},
{table:"Table_2",tab_label:"Table 2",key:"green_flg",key_label:"Green Flag"},
{table:"Table_2",tab_label:"Table 2",key:"life_flg",key_label:"Life Flag"}
];
$scope.options = [
{table:"Table_1",tab_label:"Table 1"},
{table:"Table_2",tab_label:"Table 2"}
];
$scope.sel = function(){
if($scope.key_attr){
console.log($scope.sel_attr['table']);
console.log($scope.key_attr['key']);
};
}
});
html-код:
<!DOCTYPE html>
<html ng-app="app">
<head>
<meta charset="utf-8">
<script src="angular.min.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="ctrl">
<select ng-model="sel_attr" ng-init="sel_attr = options[0]" ng-options="attr['tab_label'] for attr in options"></select>
<select ng-model="key_attr" ng-init="key_attr = key_options[0]" ng-options="attr['key_label'] for attr in key_options |filter: {table: sel_attr['table']}" ng-change="sel()"></select>
</body>
</html>