AngularJS 带有 ng-repeat 的依赖下拉菜单

AngularJS Dependent dropdown with ng-repeat

我有两个下拉字段,其中第二个取决于第一个中的选择。

第一个下拉列表的数据来自一个数据集。它列出了与帐户关联的号码 ng-repeat="option in acctList".

我想转到另一个数据集,找到匹配的帐号,然后显示与该帐户相关的客户。当第一个下拉列表中没有选择任何内容时,第二个下拉列表应该不显示任何内容(空白)。

这是我的插件,有两个下拉菜单:http://plnkr.co/edit/jDitkge1rx6GJzkdElJO?p=preview

这是我的控制器:

angular.module("app", [])
  .controller("MainCtrl", function($scope) {
    $scope.test = "This is a test";
    $scope.defnum = 1;
    $scope.acct_info = [
      {
        "Req": "MUST",
        "DefCom": "1"
      },
      {
        "Req": "NoMUST",
        "DefCom": "5"
      },
      {
        "Req": "MUST",
        "DefCom": "4"
      },
      {
        "Req": "MUST",
        "DefCom": "7"
      }
    ];

    $scope.cust_info = [
      {
        "Customer": "1",
        "Com": "1"
      },
      {
        "Customer": "2",
        "Com": "1"
      },
      {
        "Customer": "3",
        "Com": "4"
      },
      {
        "Customer": "4",
        "DefCom": "4"
      },
      {
        "Customer": "5",
        "DefCom": "7"
      },
      {
        "Customer": "6",
        "DefCom": "7"
      },
      {
        "Customer": "7",
        "DefCom": "7"
      }
    ];
  });

我添加了 ng-repeat="option in cust_info | filter:{ Com : filter.DefCom }" 以尝试根据此 SO 答案过滤第二个: 但它不起作用。我也试了一下这个教程:http://kenhowardpdx.com/blog/2015/05/angular-ngrepeat-and-ngoptions-comparison/

但是,他使用了 $watch,我看到这是不建议的,而且他必须为每个场景编写一个 if 循环,这不太理想。

我尝试过使用 ng-change,但我认为应该有更简单的方法,例如 filtertrack by。我也想知道我是否应该从 ng-repeat 更改为 ng-option。任何人都知道执行此操作的简单方法吗?

最好将 select 的选项与 ng-options 绑定。请参阅下面的代码,希望对您有所帮助。

<body ng-app="app">
<h1>Hello Plunker!</h1>
<div ng-controller="MainCtrl">
  <p>{{ test }}</p>
  <select ng-model="defcom" ng-options="opt.DefCom for opt in acct_info | filter:{Req:'MUST'}:true" >>
  </select>
  <select ng-model="com" ng-options="opt.Customer for opt in cust_info | filter: {Com: defcom.DefCom}: true">


  </select>
</div>

编辑:在更改组合之前保留原始值

angular.module("app", []).controller("MainCtrl", function($scope) {
$scope.test = "This is a test";
$scope.acct_info = [ 
.
.
.
(put this below your data definition)
$scope.defcom = $scope.acct_info[0];
var original_defcom = $scope.defcom;
var original_com = $scope.com;

查看插件:http://plnkr.co/edit/YtdX0sBC4lHs0nX6D8Pu?p=preview

您需要将选项的值设置为 {{option.DefCom}},并为 select 设置模型。然后使用该模型作为下一个 select 的过滤器。您还需要使用 ng-init 来设置 select.

的当前值

这里有一个 Plunker: http://plnkr.co/edit/hIyz5pXpsoD2QpR8uo2o?p=preview