【发布时间】:2015-10-30 23:31:32
【问题描述】:
我正在使用 ng-repeat 来显示我的数据。这工作正常。
我的 ng-repeat 结果集中的一个数据字段是一个项目数组。
Example: {x:1, y:[2,3,4]}
我想按数组中的数据过滤数据。我可以轻松地按非数组数据进行过滤,但是当我尝试通过查看数组中的 inisde 来过滤时遇到了麻烦。
这是我的标记
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 $unwind 聚合来分解我的数据,如下所示。
API 文件中的代码:
// get
.get(function (req, res) {
// unwind on the conPlayerList array field
Con.aggregate([{ $unwind: "$conPlayerList" }], function (err, cons) {
return res.json(cons);
});
})
然后我过滤了我正在寻找的用户。将 HTML Angular 标记更改为此
ng-repeat="con in cons | filter:{conPlayerList:usrSingle.username}"
为了更好地匹配我的示例,通过删除我的特定代码,它将是:
ng-repeat="con in cons | filter: {y:'3'} "
【问题讨论】:
-
您最好编写自己的过滤器函数。考虑使用辅助库,例如 lodash(下划线)。
-
您能否提供更多代码,以便为您的问题提出不同的解决方案。您可能根本不需要使用过滤器。
-
我认为这需要它自己单独的过滤器。我可以这样做,但我想知道是否有办法查看由 ng-repeat 命令返回的数组。似乎 ng-repeat 中的数据很可能包含数组字段。
-
没有过滤功能就没有视图语法可以做到这一点
-
我是 Angular 的新手,所以我想确保我不会遗漏一些简单的东西。过滤函数是处理这类问题的绝佳选择
标签: javascript arrays angularjs