我有以下工厂:
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
的函数,此函数需要返回moduleList,但是按字段num_used
desc
排序。
但是我不太确定如何使用filterFilter
,我知道我可以使用array.sort()
但是如果有可能我希望使用angular
函数?
有人能指出我正确的方向吗?
答案 0 :(得分:2)
假设 filterFilter 是您在应用中某处定义的过滤器,您可以在控制器/工厂中调用它。
导入有角度的 $ filter 服务。
app.factory("ModuleFactory", function(api, $http, $q, $filter) {
当您需要它时,您可以请求您的过滤器并将其称为:
$filter("filterFilter")(moduleList);
$ filter 服务here的角度文档页面提供了更多信息。
如果您要执行的操作是按给定属性订购 moduleList ,则应使用 orderBy 过滤器。
this.getList().then(function(moduleList) {
$filter('orderBy')(moduleList, '-num_used'); // order descending by the num_used property
})
有关 orderBy 过滤器的更多信息,请访问here。