2015-10-06 88 views
0

我有以下工厂:angularjs filterfilter为了通过在控制器/工厂

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_useddesc排序。

但是我不太清楚如何使用filterFilter为此,我知道我可以只使用array.sort()但是如果可能的话,我希望使用angular函数吗?

任何人都可以指向正确的方向吗?

+0

什么是filterFilter?您定义的过滤器的名称? – toskv

回答

2

假设filterFilter是您在应用程序某处定义的过滤器,您可以像这样在您的控制器/工厂中调用它。

导入角度$筛选器服务。

app.factory("ModuleFactory", function(api, $http, $q, $filter) {

而且当你需要它,你可以要求你的过滤器,并调用它像这样:

$filter("filterFilter")(moduleList);

更多信息可在角文档$ filter servic e here

如果你想要做什么的,你应该使用排序依据过滤一个属性是为了你的moduleList

this.getList().then(function(moduleList) { 
 
    $filter('orderBy')(moduleList, '-num_used'); // order descending by the num_used property 
 
})
有关 排序依据过滤

更多信息,可以发现here

+0

@tovsky你可以举一个例子,如果我们只使用$ filter的角度构建? –

+0

你的意思是称为** filter **的默认过滤器吗? @MarcRasmussen – toskv

+0

@MarcRasmussen我添加了一个使用orderBy的例子,以降序排列模块列表。我希望这就是你想要的。 :) – toskv