![](/img/trans.png)
[英]How to use $filter('filter') when filtering more than one column using OR as a condition?
[英]How to filter data with more than one condition
我的列表中有一些警报数据,我想根据某种条件过滤它们,例如在同一位置是否有多个类型为pull_Alarm和Emergency_alarm的警报,然后将紧急警报优先。
Here is my list:
[
{
alarmType:"Normal_ALARM"
location:"Ward5"
severity:"URGENT"
},
{
alarmType:"Emergency_Alarm
location:"Ward1"
severity:"URGENT"
},
{
alarmType:"PULL_Alarm"
location:"Ward1"
severity:"NORMAL"
}
]
我想要过滤器后的列表应该只是
[
{
alarmType:"Normal_ALARM"
location:"Ward5"
severity:"URGENT"
},
{
alarmType:"Emergency_Alarm
location:"Ward1"
severity:"URGENT"
}
]
有人可以建议我如何在这些情况下应用过滤器。
创建一个带有开关盒的过滤器,或者添加其他条件。
.filter("alarmFilter", function () {
// write condition what ever you want to add
});
并将此过滤器应用于要应用条件的表达式。
写过滤器
$scope.filter1 = function(item)
{
return (item.severity == 'URGENT');
};
然后用它
<div ng-repeat="item in object| filter:filter1">{{item.alarmType}}</div>
JSFIDDLE http://jsfiddle.net/Lvc0u55v/8866/
您可以创建一个自定义过滤器,如下所示。
angular.module('myFilters', []).
filter('byAlarmCount', function() {
return function(alarms, severity) {
var items = {
severity: severity,
out = []
};
angular.forEach(alarms, function(v, k)) {
if (this.severity[v.severity] === true) {
this.out.push(v);
}
}
return items.out;
}
});
DOM如下
<ul>
<li ng-repeat="alarm in list | byAlarmCount:severityFilter">{{alarm.location}: {{alarm.alarmType}}</li>
</ul>
如果您要进行一些复杂的过滤,则最好查看一些第三方JS库,例如lodash( https://lodash.com/ )或Underscore( http://underscorejs.org/ )。
这些提供了广泛的实用程序,可用于过滤,映射和其他常用实用程序功能。
例如,对于当前情况,您可以使用underscorejs中的_.where / _.filter。
var filteredAlarms = _.where(<YOUR LIST>, { severity: NORMAL, alarmType: ...});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.