如何在AngularJs ng repeat中通过数组进行过滤
How to filter by an array in AngularJs ng-repeat?
我正在使用ng repeat来显示我的数据。这很好。
我的ng重复结果集中的一个数据字段是一个项数组。Example: {x:1, y:[2,3,4]}
我想按数组中的数据进行筛选。我可以很容易地通过非数组数据进行筛选,但当我试图通过在数组中查找iniside来进行筛选时,我遇到了麻烦。
这是我的标记ng-repeat = "con in cons | filter: usrSingle.username in con.conPlayerList"
(编辑标记以匹配我的示例更好的ng-repeat = "con in cons | filter: '3' in con.y"
)
usrSingle是我可以访问的控制器中的一个作用域。我没有任何错误,而且我似乎找不到这样的例子。
要求提供更多代码,如下所示。我忘了提这是一个MEAN应用程序。我有MongoDB提供数据。我使用REST API进行数据调用。
角度模块的(编辑)代码:
// call to the api for data
app.factory('usrService', function ($resource) {
return $resource('/api/users', {});
});
// factory to hold user data between controllers
app.factory('usrTracker', function () {
var vUsrProfile = {
usrSingle: 'usrSingle'
};
return {
getProperty: function () {
return vUsrProfile;
},
setProperty: function (value) {
vUsrProfile = value;
}
};
});
// angular controller
app.controller('usrPageController', function ($scope, usrTracker, conService, postService) {
var usrSingle = usrTracker.getProperty();
$scope.usrSingle = usrSingle;
$scope.cons = conService.query();
$scope.posts = postService.query();
});
(最终版)标记的答案是一个很好的解决方案。但我走了另一个方向。我使用mongoDB$unflow聚合来分解我的数据,如下所示。
API文件中的代码:
// get
.get(function (req, res) {
// unwind on the conPlayerList array field
Con.aggregate([{ $unwind: "$conPlayerList" }], function (err, cons) {
return res.json(cons);
});
})
然后我过滤了我要找的用户。将HTML角度标记更改为此
ng-repeat="con in cons | filter:{conPlayerList:usrSingle.username}"
为了更好地匹配我的示例,通过删除我的特定代码,它将是:
ng-repeat="con in cons | filter: {y:'3'} "
您可以在数组上使用Angular内置的过滤器逻辑,但请记住,这不是完全匹配的,如果usrSingle
设置为3,则将与300的数组条目匹配,请参阅Fiddle中的示例。
<div ng-repeat = "con in cons | filter:{y:usrSingle} ">...</div>
要与数组元素精确匹配,可以使用filter:
和控制器上的谓词函数,即
控制器(Fiddle):
app.controller('usrPageController', function ($scope) {
$scope.filterFn = filterFn;
$scope.usrSingle = 3;
$scope.cons = [
{x:0, y:[1,2,3]},
{x:1, y:[2,3,4]},
{x:2, y:[3,4,5]},
{x:3, y:[4,5,6]},
{x:4, y:[5,6,7]}
];
function filterFn(con){
return con.y.indexOf($scope.usrSingle) > -1;
}
});
视图:
<div ng-repeat = "con in cons | filter:filterFn">...</div>
或者,您可以创建一个自定义过滤器,该过滤器可以在应用程序的其他地方重复使用,并将usrSingle
作为参数传入:
过滤器(Fiddle):
app.filter('customFilter', function() {
return function(input, value) {
var result = [];
input.forEach(function(item){
if(item.y.indexOf(value) > -1){
result.push(item);
}
});
return result;
};
});
视图:
<div ng-repeat = "con in cons | customFilter:usrSingle">...</div>
- 使用一个键的值数组过滤多个javascript对象
- 根据另一个包含角度 js 中对象的数组过滤包含对象的数组
- Javascript:按字符串数组过滤对象数组
- 在 javascript 中使用数组过滤 for AngularJS
- 挖空和选择器的数组过滤问题
- Lodash 按数组的属性数组过滤
- 如何用另一个字符串数组过滤ng重复中的字符串数组
- 如何根据javascript数组过滤rss数据
- 基于NodeJS中的其他数组过滤/搜索对象的JavaScript数组
- 使用不带嵌套循环的数组过滤对象数组js
- 使用数组过滤数组Javascript
- 用一维数组过滤多维数组
- AngularJS:如何给值数组过滤
- Angularjs,逐个数组过滤
- 用另一个对象数组过滤Javascript对象数组
- 创建搜索栏以将数组过滤到表中
- 通过id数组过滤角度数据
- coffeescript -数组过滤不工作
- Backbone.js:如何通过模型ID数组过滤对象集合
- 使用基于嵌套值的数组过滤对象数组