我有两个下拉字段,第二个字段取决于第一个中的选择。
第一个下拉列表的数据来自一个数据集。它列出了与帐户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答案过滤第二个:Filter ng-options from ng-options selection
但它不起作用。我还看了一下本教程:http://kenhowardpdx.com/blog/2015/05/angular-ngrepeat-and-ngoptions-comparison/
我尝试过使用ng-change,但我认为应该有更简单的方法,例如filter
或track by
。我还想知道是否应该从ng-repeat更改为ng-option。任何人都有一种简单的方法可以做到这一点吗?
答案 0 :(得分:1)
最好将选项的选项与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;
请参阅plunker:http://plnkr.co/edit/YtdX0sBC4lHs0nX6D8Pu?p=preview
答案 1 :(得分:1)
您需要将选项的值设置为{{option.DefCom}}
,并为选择设置模型。然后使用该模型作为下一个选择的过滤器。您还需要使用ng-init
来设置选择的当前值。
这里有一个Plunker给你: http://plnkr.co/edit/hIyz5pXpsoD2QpR8uo2o?p=preview