我有以下工厂:
app.factory("ModuleFactory", function (api, $http, $q,filterFilter) {
var moduleList = [];
var categoryList = [];
var moduleTypeList = [];
var academyModuleTypeList = [];
var mostUsed = [];
var lastUpdated = null;
return {
/**
* @description This function gets the entire module list for the given users organization.
* @author Marc Rasmussen
* @returns {d.promise}
*/
getList: function () {
var d = $q.defer();
if (moduleList.length == 0) {
$http.get(api.getUrl('module', null))
.success(function (response) {
moduleList = response;
lastUpdated = new Date();
d.resolve(response);
});
}
else {
d.resolve(moduleList);
}
return d.promise;
},
getMostUsed: function () {
var d = $q.defer();
if(moduleList.length <= 0){
this.getList().then(function () {
})
}
}
}
});
现在列表moduleList
包含objects
的列表在这些对象中有一个字段num_used
正如您所看到的,我创建了一个名为getMostUsed
的函数,该函数需要返回模块列表,但按字段num_used
desc
排序。
然而,我不太确定如何使用filterFilter
为此,我知道我可以使用array.sort()
,但我希望使用angular
功能,如果可能的话?
假设filterFilter是你在应用某处定义的过滤器,你可以像这样在控制器/工厂中调用它。
导入angular的$filter服务
app.factory("ModuleFactory", function(api, $http, $q, $filter) {
当你需要它的时候,你可以请求你的过滤器,并像这样调用它:
$filter("filterFilter")(moduleList);
关于$filter服务的更多信息请参见angular文档页。
如果你想做的是按照给定的属性对moduleList排序,你应该使用orderBy过滤器。
this.getList().then(function(moduleList) {
$filter('orderBy')(moduleList, '-num_used'); // order descending by the num_used property
})
关于orderBy过滤器的更多信息可以在这里找到。