根据AngularJS中另一个select元素的值设置选择选项
Set selection options depending on another select element's value in AngularJS
我在命名这个问题时几乎和我在处理实际问题时一样困难!我有两个选择:
选择1:<select ng-change="bankSelected()" ng-model="user.bankName">
<option selected value="">Select</option>
<option ng-repeat="bank in banks" value="{{bank.name}}">{{bank.name}}</option>
</select>
选择2:<select ng-model="user.branch">
<option selected value="">Select</option>
<option ng-repeat="// what to do??"></option>
</select>
我的控制器中的'bankSelected()'函数:
$scope.bankSelected = function () {
console.log('Bank selected: ' + $scope.user.bankName);
}
我有一个JSON文件,我将从中导入所有银行对象,下面是一个示例:
{
"banks" : [
{
"name" : "Bank A",
"branches" : [
{
"name" : "Branch 1",
"code" : "1"
},
{
"name" : "Branch 2",
"code" : "2"
}
]
},
{
"name" : "Bank B",
"branches" : [
{
"name" : "Branch 3",
"code" : "3"
},
{
"name" : "Branch 4",
"code" : "4"
},
{
"name" : "Branch 5",
"code" : "5"
}
]
}
]
}
我实际使用的JSON大约有1000行长。所以我的问题是,如果用户在第一个选择框中选择'Bank A'
,我希望第二个选择框显示'Branch 1'
和'Branch 2'
。同样,如果用户选择'Bank B'
,我希望显示'Branch 3'
、'Branch 4'
和'Branch 5'
。如果用户在第一次选择中没有选择任何内容(例如,没有选择银行),那么第二次选择(分支)不应该包含任何内容。我相信你明白我的意思吧?
如何在AngularJS中实现这一点?
bank ng-repeat
<select ng-model="user.bankName">
<option selected value="">Select</option>
<option ng-repeat="bank in banks" value="{{bank.name}}">{{bank.name}}</option>
</select>
分支ng-repeat
<select ng-model="user.branch" ng-show="user.bankName">
<option selected value="">Select</option>
<option ng-repeat="branch in getBranches(user.bankName)" value="{{branch.code}}">{{ branch.name }}</option>
</select>
分支重复的源被赋值给作用域中的getBranches()
函数,这里我们传递之前选择的银行名称。
$scope.getBranches = function(selectedBank) {
// get the selected bank object from the banks array
var filteredBank = $filter('filter')($scope.banks, selectedBank);
// return the branches of the selected bank
return filteredBank[0].branches;
};
不要忘记注入$filter
服务,如下所示
app.controller('CtrlName', function($scope, $filter) {...
这里是DEMO
如果你可以把你的选择改成像下面这样,它会更干净:)
这将选择所选选项的整个对象。
<select ng-model="user.bankName" ng-options="bank.name for bank in banks">
</select>
在这里,我们可以使用选定的银行对象来获取user.bankName.branches
的分支机构。
<select ng-model="user.branch" ng-if="user.bankName" ng-options="branch.code as branch.name for branch in user.bankName.branches">
</select>
所以我们可以去掉getBranches()
这里是DEMO
相关文章:
- Bootstrap Dropdown selection是在*all*下拉菜单上设置选择
- Google 图表 - 设置选择不会滚动到表格可视化中的选定行
- 是否可以在Internet Explorer 11中使用JavaScript设置选择元素的大小属性
- 设置选择选项'选择'在模式引导中
- 如何在iOS网页中设置选择
- 设置选择框的值
- 在HTML中记住用户区域设置选择的最简单方法
- 使用整数数据类型设置“选择Dropbox值”
- Knockout.js-未设置选择值
- jQuery:根据另一个复选框设置选择框的值
- 如何通过 innerHTML 设置选择标签选项
- 如何以正确的方式设置选择标签以具有“5”的大小
- CasperJS 无法设置选择列表值
- 设置选择框样式时出现问题
- 角度.js在ng重复中设置<选择>选项
- 如何从 AngularJS 的下拉框中设置选择默认值
- 如何在 jquery 手机中显示之前在页面中设置选择框的值
- 如何在本地存储中设置选择下拉列表的值并检索它,以及将值设置为默认值,除非更改
- 加载页面时无法使用 javascript 设置选择选项
- 无法使用 jquery 设置选择所选值