Angularjs вернуть массив с завода

0

Я пытаюсь реорганизовать свое угловое приложение. Поэтому я представил файл 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 ожидает, что массив, который должен заполнить функцию, должен вернуться.

Я делаю что-то не так, поэтому надеюсь, что ты поможешь мне.

Благодарю!

  • 0
    bedragok функции fn должна быть var bedragok = function bedragOk(categorie) { return categorie.bedragAf > 0; };
  • 1
    Фабрики / службы в Angular не связаны с $scope как контроллер. При этом вы должны получить сообщение об ошибке: var categorienFilter = $scope.categorien.filter(bedragok); b / c область действия $ не определена. Вы на самом деле не описываете, что не работает в вашем вопросе.
Показать ещё 1 комментарий
Теги:
arrays
factory

1 ответ

0
Лучший ответ

Я думаю, вы можете использовать собственный фильтр, если хотите только фильтровать. Тогда ваш код может выглядеть в демо ниже.

Если вы хотите использовать фабрику, вы можете передать массив своей функции заполнения, например $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>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню