2015-11-01 85 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>