我有以下工厂:

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

谁能指出我正确的方向?

最佳答案

假设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
})





可以在here中找到有关orderBy过滤器的更多信息。

关于javascript - angularjs filterfilter在 Controller /工厂中订购,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32975633/

10-11 23:31