2015-11-01 87 views
0

我试图重构我的角度应用程序。因此我介绍了一个包含工厂服务的service.js文件。该代码是这样的:angularjs从工厂返回数组

app.factory('Categorien', function() { 
var Categorien = { 
    populate: function() { 
     var _categorien = []; 
     var bedragok = (function bedragOk(categorie) { 
      return categorie.bedragAf > 0; 
     }); 

     var categorienFilter = $scope.categorien.filter(bedragok); 
     categorienFilter.forEach(function(item) { 
      var dataArray = []; 
      dataArray.push(item.omschrijving); 
      dataArray.push(item.bedragAf); 
      _categorien.push(dataArray); 
     }); 
     return _categorien; 
    } 
}; 
return Categorien; 
}); 

和Controller我称这种由:

 $scope.dataTable = Categorien.populate(); 

所以DataTable中预计的阵列功能填入应返回的。

我做错了什么,所以我希望你能帮助我。

谢谢!

+0

你函数'bedragok' FN应该是'VAR bedragok =功能bedragOk( categorie){ return categorie.bedragAf> 0; };' –

+1

Angular中的工厂/服务与控制器的“$ scope”没有关联。你这样做时应该会出错:'var categorienFilter = $ scope.categorien.filter(bedragok);'b/c $ scope是未定义的。你没有真正描述你的问题中没有什么工作。 –

+0

在angularjs工厂和服务是单身服务。但是'$ scope' - 范围可以有多个实例。因此,你不应该在任何服务/工厂中包含'$ scope'。有关更多详细信息,请参阅“https://docs.angularjs.org/guide/services” - AngularJS文档。 – Aviro

回答

0

我想你可以使用自定义过滤器,如果你只想做过滤。然后你的代码可能看起来像下面的演示。

如果您想使用工厂,您可以将数组传递到您的填充函数,如$scope.dataTable = Categorien.populate(['your', 'array', 'here']);或者您可以使用其他方法将数据添加到工厂。如评论$scope中所述,不应传递给工厂。

下面的演示(或在此fiddle)显示它如何与自定义过滤器的工作:

angular.module('demoApp', []) 
 
\t .controller('MainController', MainController) 
 
    .filter('categoryFilter', function() { 
 
     return function(input) { 
 
      var _categorien = []; 
 
      var bedragok = (function bedragOk(categorie) { 
 
       return categorie.bedragAf > 0; 
 
      }); 
 

 
      var categorienFilter = input.filter(bedragok); 
 
      categorienFilter.forEach(function(item) { 
 
       var dataArray = []; 
 
       dataArray.push(item.omschrijving); 
 
       dataArray.push(item.bedragAf); 
 
       _categorien.push(dataArray); 
 
      }); 
 
      return _categorien; 
 
     } 
 
\t }); 
 

 
function MainController() { 
 
\t this.data = [ 
 
     { 
 
      \t bedragAf: 100, 
 
      \t omschrijving: 'test' 
 
     }, 
 
     { 
 
      \t bedragAf: -100, 
 
      \t omschrijving: 'test neg. value' 
 
     }, 
 
     { 
 
      \t bedragAf: 100, 
 
      \t omschrijving: 'test2' 
 
     } 
 
    ];   
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="demoApp" ng-controller="MainController as ctrl"> 
 
    <pre> 
 
raw: 
 
{{ctrl.data | json : 2}} 
 
     
 
filtered: 
 
{{ctrl.data | categoryFilter | json : 2}} 
 
    </pre> 
 
</div>