angularjs filterfilter在控制器/工厂中排序

时间:2015-10-06 17:05:17

标签: javascript angularjs filter

我有以下工厂:

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函数?

有人能指出我正确的方向吗?

1 个答案:

答案 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