我正在尝试重构我的有角度的应用程序。因此,我引入了一个包括工厂服务的service.js文件。代码是这样的:
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;
});
在控制器中,我通过以下方式调用它:
$scope.dataTable = Categorien.populate();
因此,dataTable期望一个数组,该数组应填充函数。
我做错了,希望您能帮助我。
谢谢!
我认为如果只想进行过滤,则可以使用自定义过滤器。然后您的代码可能类似于下面的演示。
如果您想使用工厂,则可以将数组传递给populate函数,例如$scope.dataTable = Categorien.populate(['your', 'array', 'here']);
,也可以使用其他方法将数据添加到工厂。如评论中所述,$scope
不应传递给工厂。
以下演示(或在该小提琴中)展示了如何使用自定义过滤器:
angular.module('demoApp', [])
.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;
}
});
function MainController() {
this.data = [
{
bedragAf: 100,
omschrijving: 'test'
},
{
bedragAf: -100,
omschrijving: 'test neg. value'
},
{
bedragAf: 100,
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>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句