Populate Dropdown 2 based on Dropdown 1 selection

前端 未结 3 1488
再見小時候
再見小時候 2020-11-30 08:55

I am able to populate 2 dropdowns directly from database. My problem is, the 2nd dropdown values has to be populated based on the 1st dropdown selection. Since i am new to

相关标签:
3条回答
  • 2020-11-30 09:29

    Do it like this:

    <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>
    

    With javascript you just need only one controller, the office controller:

    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' } }
    );
    });
    
    0 讨论(0)
  • 2020-11-30 09:35

    You shouldn't need 2 controllers for this, in fact that is probably one of the problems. Once they are within the same scope you can easily tie them together. Use ng-change on the first option to trigger a function that gets the values to populate the second option.

    Example Fiddle: http://jsfiddle.net/TheSharpieOne/Xku9z/

    Also, you can use ng-show with the second select's options array length to only show the second select when it has been populated.

    Example Fiddle: http://jsfiddle.net/TheSharpieOne/Xku9z/1/

    0 讨论(0)
  • 2020-11-30 09:47

    I implemented like following, Hope it helps :)

    Controller code

    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 code:

    <!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>
    
    0 讨论(0)
提交回复
热议问题