用角方式过滤两个下拉框
Filter Two Dropdowns Based on One Another the Angular Way
我有两个下拉列表。这些下拉框中允许的选项应该根据其他下拉框中的内容进行过滤。这是第一个下拉列表:
<select ng-model="filter.levelPregenerate">
<option value="">All</option>
<option value="assox">Associate's</option>
<option value="bachx">Bachelor's</option>
<option value="mastx">Master's</option>
<option value="doctx">Doctorate</option>
<option value="nondx">Non-Degree</option>
<option value="bridx">Bridge</option>
</select>
第二个下拉框为ng-repeat,如下所示:
<select ng-model="filter.degreeTypePregenerate">
<option value="">All</option>
<option ng-repeat="type in degreeType | orderBy:'toString()'">{{type}}</option>
</select>
这是上面重复的数组:
$scope.degreeType = ['BA', 'BS', 'MA', 'MBA',
'MDIV', 'MED', 'MFA', 'MPH',
'MS',' DNP', 'EDD', 'PHD',
'EDSPL', 'GRDCERT'];
第一个和第二个下拉框中的选项应该相互过滤。下面是两者之间的映射(过滤器应该如何工作):
assox: '';
bachx: 'BA, BS';
mastx: 'MA, MBA, MDIV, MED, MFA, MPH, MS';
doctx: 'DNP, EDD, PHD';
nondx: 'EDSPL, GRDCERT';
bridx: ''
因此,如果在第二个下拉列表中选择了'BA',那么'bachx'应该是第一个下拉列表中唯一可用的选项。相反,如果' docx '在第一个下拉框中被选中,'DNP', 'EDD'和'PHD'应该是第二个下拉框中唯一可选的选项。
这里有一个完整的代码:http://codepen.io/trueScript/pen/LVZKEo
我不认为我可以简单地应用一个基本的'| filter:foo'到第二个下拉列表,因为它不知道如何过滤它。Angular是怎么做的呢?
您可以设置一个自定义过滤器并返回应该显示的值。有两种方法:
选项1 - If/else
angular.module('programApp', [
'programApp.controllers',
'programApp.filters'
]);
angular.module('programApp.filters', [])
.filter('dropdownFilter', function() {
return function(input, degreeTypePregenerate) {
if (degreeTypePregenerate === 'assox') {
return [];
} else if (degreeTypePregenerate === 'bachx') {
return ['BA', 'BS'];
}
// and so on..
}
});
选项2 -一个对象(我认为是cleaner)
angular.module('programApp.filters', [])
.filter('dropdownFilter', function() {
return function(input, degreeTypePregenerate) {
var degreeType = {
'assox': [],
'bachx': ['BA', 'BS']
};
return degreeType[degreeTypePregenerate];
}
});
最后,将过滤器应用于ng-repeat,并传入要过滤的变量:
<option ng-repeat="type in degreeType | orderBy:'toString()' | dropdownFilter:filter.levelPregenerate">{{type}}</option>
Working codependency: codepen
相关文章:
- 链接两个网页或网络应用程序的最佳方式
- 别名或以其他方式合并两个具有不同名称的相同对象原型
- 设置两个反应组件之间状态的正确方式
- 使用两个按钮(提交按钮和普通按钮),它们应该以不同的方式提交相同的表单
- 切换两个隐藏单选按钮的最佳方式是什么
- 两个 JavaScript 对象具有相同的属性实现方式,但原型不同
- JavaScript 中通过公共属性“交叉”两个 JSON 对象数组的最佳方式
- AngularJS 以某种方式一键对两个表进行排序
- Javascript:从给定的两个片段中引用“this”的可接受方式
- JQueryUI:创建两个拖放列表的最佳方式,其中一个是可排序的,另一个在拖放时重新排序
- 如何将两个段落连接在一起以内联方式显示,而不会使文本移动
- 合并两个独立JavaScript对象的属性的最佳方式是什么
- 什么是最好的方式来显示两个外部网页并排
- 表单有两个提交.如何通过javascript以编程方式提交一个特定的提交
- 渲染两个静态流星模板之间路由的最佳方式
- 两个相同的函数工作方式不同
- 在页面上链接两个内部Knockout组件的最佳方式是什么?
- 基于公共id连接两个js对象数组的功能方式
- AngularJS-在两个控制器之间共享数据的正确方式
- 什么是最好的方式,使两个网页之间相互沟通,来回