angularjs从工厂返回数组

angularjs return array from factory

本文关键字:数组 返回 工厂 angularjs      更新时间:2023-09-26

我正在尝试重构我的angular应用程序。因此,我引入了一个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>