angularjs filterfilter order by in controller / factory

angularjs filterfilter order by in controller / factory

本文关键字:controller factory in by filterfilter order angularjs      更新时间:2023-09-26

我有以下工厂:

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过滤器的更多信息可以在这里找到。