【问题标题】:AngularJS populate a <select> field based on input from previous <select> fieldAngularJS 根据前一个 <select> 字段的输入填充一个 <select> 字段
【发布时间】:2016-07-16 12:49:20
【问题描述】:

我有 2 个相互依赖的下拉菜单。第一个效果很好,但我希望根据第一个菜单中的选择填充第二个下拉列表。我意识到以前也有人问过类似的问题,但我的数据似乎采用了不同的格式。这是我的代码:

<body ng-app="patientSim" ng-controller="patientCtrl">

<button style="width:20%;" ng-click="addChar()">Add Characteristic</button>
<div class="row">
    <div class="col-md-3"><select ng-model="selectedCategory" ng-options="x.cat as (x.cat | underFilter) for x in (enumChars | duplicateFilter)"></select></div>
    <div class="col-md-3"><select ng-model="selectedName" ng-options="x.enumName as (x.enumName | underFilter) for x in enumChars"></select></div>
    <div class="col-md-3"><button ng-click="eqWeight()">Equalize Weights</button></div>
    <div class="col-md-3"><button ng-click="reset()">Reset</button></div>
</div>

这里是 JSON 的 2 个部分:

 {
        "enumID": 1,
        "enumName": "Gender",
        "isTree": false,
        "enumAlloc": 10,
        "enumVals": [
            "Unknown",
            "Male",
            "Female",
            "Transgender"
        ],
        "enumText": null,
        "cat": "Demographics"
    }, 
      {
        "enumID": 2,
        "enumName": "Race",
        "isTree": false,
        "enumAlloc": 15,
        "enumVals": [
            "Unknown",
            "American Indian/Alaska Native",
            "Asian",
            "Black",
            "Native Hawaiian/Other Pacific Islander",
            "White/Caucasian",
            "Other"
        ],
        "enumText": null,
        "cat": "Demographics"
    },

第一个下拉菜单包含“人口统计”和“疾病和伤害”,均位于“猫”名称下。整个文件包含 5 个“人口统计”部分和 1 个“疾病和伤害”部分。所有 6 个部分都存储在一个名为 enumChars 的范围值中,我在 ng-options 中使用了它。某些部分有超过 45,000 个值,所以我不想在这里发布它们。我的目标是让第二个下拉列表填充与“cat”对应的“enumName”。因此,例如,如果我在第一个下拉列表中选择“人口统计”,第二个下拉菜单将填充“性别”、“种族”和其他部分中的其他枚举名称值也包含“猫”:“人口统计”。我该怎么做呢?谢谢!!

【问题讨论】:

  • 请分享您的 Angular JS 代码以便轻松调试

标签: javascript angularjs drop-down-menu


【解决方案1】:

如果我很好地理解了您的问题,您希望根据 1st. &lt;select&gt; 中选择的值填充 2nd &lt;select&gt; enumVals

那么,如果我是正确的,您可以执行以下操作:

(function() {
  "use strict";
  angular.module('app', [])
    .controller('mainCtrl', function($scope) {
      $scope.enumChars = [  
         {  
            "enumID":1,
            "enumName":"Gender",
            "isTree":false,
            "enumAlloc":10,
            "enumVals":[  
               "Unknown",
               "Male",
               "Female",
               "Transgender"
            ],
            "enumText":null,
            "cat":"Any category"
         },
         {  
            "enumID":2,
            "enumName":"Race",
            "isTree":false,
            "enumAlloc":15,
            "enumVals":[  
               "Unknown",
               "American Indian/Alaska Native",
               "Asian",
               "Black",
               "Native Hawaiian/Other Pacific Islander",
               "White/Caucasian",
               "Other"
            ],
            "enumText":null,
            "cat":"Demographics"
         }
      ];
    });
})();
<html ng-app="app">

<head>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.7/angular.min.js"></script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/css/bootstrap.min.css" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/js/bootstrap.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-messages/1.5.7/angular-messages.min.js"></script>
</head>

<body ng-controller="mainCtrl">
  <button style="width:20%;" ng-click="addChar()">Add Characteristic</button>
  <div class="row">
    <div class="col-md-3">
      <select ng-model="selectedCategory" ng-options="obj as obj.cat for obj in enumChars"></select>
    </div>
    <div class="col-md-3" ng-if="selectedCategory">
      <select ng-model="selectedName" ng-options="enum for enum in selectedCategory.enumVals"></select>
    </div>
    <div class="col-md-3">
      <button ng-click="eqWeight()">Equalize Weights</button>
    </div>
    <div class="col-md-3">
      <button ng-click="reset()">Reset</button>
    </div>
  </div>
</body>

</html>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 2010-10-06
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多