【问题标题】:In Angular jS trying to create two dropdown在 Angular jS 中尝试创建两个下拉列表
【发布时间】:2018-10-29 06:03:22
【问题描述】:

我正在尝试在 Angular JS 中创建两个下拉列表 第一个下拉列表将具有值: “A”、“B”、“C” 当我选择 A 时,它应该在第二个下拉列表中显示 A1、A2、A3、A4。同样,对于 B,它应该显示 B1、B2、B3、B4 和 C,它应该显示 C1、C2、C3、C4

.下面是我的两个 JSON

$scope.column = [{
        colid: 1,
        name:"A"
        }, {
        colid: 2,
        name: "B"
       }, {
        colid: 3,
        name: "C"
       }];

$scope.Value=[{"A":"A1","B":"B1","C":"C1"},
{"A":"A2","B":"B2","C":"C2"},
{"A":"A3","B":"B1","C":"C3"},
{"A":"A1","B":"B3","C":"C1"},
{"A":"A4","B":"B4","C":"C4"},
];

下面是我试过的代码

    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<script>
var app = angular.module('colFilter', ['ui', 'ui.filters']);
app.controller("colFilterCtrl", function ($scope, $timeout) {
$scope.columnList = [{
        colid: 1,
        name:"A"
        }, {
        colid: 2,
        name: "B"
       }, {
        colid: 3,
        name: "C"
       }];

$scope.Value=[{"A":"A1","B":"B1","C":"C1"},
              {"A":"A2","B":"B2","C":"C2"},
              {"A":"A3","B":"B1","C":"C3"},
              {"A":"A1","B":"B3","C":"C1"},
              {"A":"A4","B":"B4","C":"C4"},
];
};
</script>
<div id="colFilterApp" data-ng-app="colFilter">
    <div id="colFilterAppCtrl" data-ng-controller="colFilterCtrl" >
<select  id="column" name="columns" ng-options="column.name for column in columnList" ng-model="selectedItem">
     <option value="All">--Select--</option>
</select>
<select  id="value" name="values">
     <option value="All">--Select--</option>
     <option ng-repeat="val in Value"  value="{{val.selectedItem}}">{{val.selectedItem}}</option>
</select> 
</div>
</div>

有什么帮助吗?提前致谢

【问题讨论】:

    标签: angularjs dropdown


    【解决方案1】:

    使用下面的代码 sn-p。

    1. $scope.$watch放在selectedItem
    2. 使用$scope.Value.filter

    function colFilterCtrl($scope) {
    
      $scope.selectedItem = '';
      $scope.search = [];
    
      $scope.columnList = [{
        colid: 1,
        name: "A"
      }, {
        colid: 2,
        name: "B"
      }, {
        colid: 3,
        name: "C"
      }];
    
      $scope.Value = [
        {"A":"A1","B":"B1","C":"C1"},
        {"A":"A2","B":"B2","C":"C2"},
        {"A":"A3","B":"B1","C":"C3"},
        {"A":"A1","B":"B3","C":"C1"},
        {"A":"A4","B":"B4","C":"C4"}
      ];
    
    
      $scope.$watch('selectedItem', function() {
        $scope.search = [];
        $scope.Value.filter(function(obj) {
          let values = Object.values(obj)[Object.keys(obj).indexOf($scope.selectedItem.name)];
          $scope.search.push(values);
        });
        
        // remove duplicate values
        $scope.search = $scope.search.filter(function(item, pos) {
        return $scope.search.indexOf(item) == pos;
    })
    
      });
    
    };
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
    
    <div ng-app>
    <div ng-controller="colFilterCtrl">
        
        <select name='columns' id="column"  ng-model="selectedItem" ng-options="column as column.name for column in columnList"> <option value="" disabled>Select</option> </select>
                
        <select name='values' id="value" ng-model="selectSubCategory" ng-options="o as o for o in search" required> <option value="" disabled>Select</option> </select>
          
      </div> 
          
    </div>

    【讨论】:

    • 非常感谢。这就是我要找的
    【解决方案2】:

    它被称为级联下拉菜单。在这里我创建了一个小提琴请检查它并让我知道https://jsfiddle.net/vinothsm92/u50hgn5a/1741/

    $scope.$watch('first', function () {
            $scope.Seconds = allSeconds.filter(function (s) {
                return s.firstId == $scope.first.Id;
            });
            $scope.city = {};
            $scope.Second = {};
            $scope.cities = [];
        });
    

    在这里,我创建了一个$watch,当第一次下拉更改时它会命中。而不是$watch,您可以使用ng-click点击事件绑定数据。

    【讨论】:

    • 谢谢,但我需要我的 json 以这种风格工作
    【解决方案3】:

    这里还有一个例子。在此示例中,正在创建一个数据对象,其中包含每个第一个下拉项目的映射,这些下拉项目可以在不久的将来通过数据库填充。这是 JSFiddle https://jsfiddle.net/whb1saxg/1/

    $scope.columnList = [
                        {
                            colid: 1,
                            name: "A"
                        }, {
                            colid: 2,
                            name: "B"
                        }, {
                            colid: 3,
                            name: "C"
                        }
                    ];
    
                    $scope.selectedItem = $scope.selectedItemValues  = [];
    
                    $scope.childValues = {
                        "A": [{
                            colid: 1,
                            name: "A1"
                        }, {
                            colid: 2,
                            name: "A2"
                        }, {
                            colid: 3,
                            name: "A3"
                        }],
    
                        "B": [{
                            colid: 4,
                            name: "B1"
                        }, {
                            colid: 5,
                            name: "B2"
                        }, {
                            colid: 6,
                            name: "B3"
                        }],
                        "C": [{
                            colid: 7,
                            name: "C1"
                        }, {
                            colid: 8,
                            name: "C2"
                        }, {
                            colid: 9,
                            name: "C3"
                        }]
                    };
    $scope.ddlChange = function () {
                    $scope.Value = ($scope.selectedItem !== undefined) ? $scope.childValues[$scope.selectedItem.name] : [];
                };
    

    【讨论】:

    • 是的,这有一天可能会有用
    猜你喜欢
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多