通过多列和多个值过滤angular js数组
filter angular js array by multiple columns and values
我正在尝试使用多列过滤一个有角度的js数组。
例如|filter:{sender:"fred",receiver:"josh"}| filter:{sender:‘josh’,receiveer:‘fred’}
但它似乎不起作用,请查看下面我的完整代码
<div ng-repeat="msg in messages | filter:{sender: 'fred', reciever: 'josh'} | filter:{sender: 'josh', reciever: 'fred'}">
Sender : {{ msg.sender }} MSg : {{ msg.msg }} Reciever : {{ msg.reciever }}
</div>
</div>
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.messages = [
{sender:'fred', reciever:'josh', msg:'HI'},
{sender:'josh', reciever:'fred', msg:'i DEY'},
{sender:'fred', reciever:'josh', msg:'Hello'}
];
});
</script>
这是js小提琴https://jsfiddle.net/c8uvrbvj/
我更喜欢在控制器中过滤消息。DOM过滤器可能会导致性能问题。请参阅:使用Controller$filter来防止$digest性能问题
但这基本上有效:
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.messages = [
{sender:'fred', receiver:'josh', msg:'HI'},
{sender:'josh', receiver:'fred', msg:'i DEY'},
{sender:'josh', receiver:'racheal', msg:'hw re u2?'},
{sender:'barack', receiver:'angela', msg:'Dear'},
{sender:'fred', receiver:'josh', msg:'Hello'},
{sender:'angela', receiver:'barack', msg:'Moin'},
{sender:'josh', receiver:'racheal', msg:'hw re u?'}
];
}).filter('myfilter', function() {
return function(input, filter) {
return input.filter(function(e1){
return filter.find(function(e2) {
return e1.sender === e2.sender && e1.receiver === e2.receiver;
});
});
};
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="myCtrl">
<div ng-repeat="msg in (messages | myfilter:[{sender: 'fred', receiver: 'josh'},{sender: 'josh', receiver: 'fred'}])">
Sender : {{ msg.sender }} MSg : {{ msg.msg }} Reciever : {{ msg.reciever }}
</div>
</div>
它遵循了一个没有DOM过滤的解决方案,我认为有一个更好的方法:
var app = angular.module('myApp', []);
function filter(input, filter) {
return input.filter(function(e1){
return filter.find(function(e2) {
return e1.sender === e2.sender && e1.receiver === e2.receiver;
});
});
}
app.controller('myCtrl', function($scope) {
var messages = [
{sender:'fred', receiver:'josh', msg:'HI'},
{sender:'josh', receiver:'fred', msg:'i DEY'},
{sender:'josh', receiver:'racheal', msg:'hw re u2?'},
{sender:'barack', receiver:'angela', msg:'Dear'},
{sender:'fred', receiver:'josh', msg:'Hello'},
{sender:'angela', receiver:'barack', msg:'Moin'},
{sender:'josh', receiver:'racheal', msg:'hw re u?'}
];
var name1 = 'fred';
var name2 = 'josh';
var myFilter = [{sender: name1, receiver: name2},{sender: name2, receiver: name1}];
$scope.messages = filter(messages, myFilter);
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="myCtrl">
<div ng-repeat="msg in messages">
Sender : {{ msg.sender }} MSg : {{ msg.msg }} Reciever : {{ msg.reciever }}
</div>
</div>
相关文章:
- Angular:使用选择列表选择过滤代码中的对象
- Angular中的过滤和$http承诺
- angular js多个复选框过滤多级JSON
- 使用Angular js ng repeat指令过滤json对象
- Angular JS-过滤ng重复
- Angular自定义过滤器在处理某些匹配时注销,但会过滤掉所有结果
- Angular:如何根据模型中过滤的元素数量隐藏DOM元素
- 更改src-img指令或过滤angular
- 在Angular.js中通过检查作用域变量进行过滤
- 如何使用angular ui select过滤两个字段中的数据
- Angular Js过滤控制器中的嵌套数组
- 通过多列和多个值过滤angular js数组
- 如何在 Angular js 中按日期过滤数据
- 在 Angular JS 中通过映射键进行过滤
- 突出显示 Angular JS 中的过滤行
- Angular JS 搜索过滤器不会使用 Firebase 过滤数据
- 如何过滤Angular中不相等的嵌套对象
- 使用外部API过滤Angular中的类型
- 预过滤angular $http请求,就像我的ajax示例
- 通过下拉框和文本框过滤Angular