Я пытаюсь реорганизовать свое угловое приложение. Поэтому я представил файл 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 ожидает, что массив, который должен заполнить функцию, должен вернуться.
Я делаю что-то не так, поэтому надеюсь, что ты поможешь мне.
Благодарю!
Я думаю, вы можете использовать собственный фильтр, если хотите только фильтровать. Тогда ваш код может выглядеть в демо ниже.
Если вы хотите использовать фабрику, вы можете передать массив своей функции заполнения, например $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>
bedragok
функции fn должна бытьvar bedragok = function bedragOk(categorie) { return categorie.bedragAf > 0; };
$scope
как контроллер. При этом вы должны получить сообщение об ошибке:var categorienFilter = $scope.categorien.filter(bedragok);
b / c область действия $ не определена. Вы на самом деле не описываете, что не работает в вашем вопросе.