I'm trying to optimize performance by moving code from view to controller.
I would like to move this code in my view:
ng-repeat="item in items | filter: {passed:false} | filter: data.searchQuery | filter: deepSearch() | orderBy: 'begin_datetime'"
to something like this in my controller:
$scope.filteredItems = [];
var applyFilters = function() {
var items = [];
items = $filter({passed:false})($scope.items);
items = $filter($scope.data.searchQuery)(items);
items = $filter($scope.deepSearch())(items);
$scope.filteredItems = items;
}
in order to get this in my view:
ng-repeat="item in filteredItems | orderBy: 'begin_datetime'"
However, I'm getting stuck with
Error: [$injector:unpr] Unknown provider: [object Object]FilterProvider <- [object Object]Filter
Is there an easy way of doing this?
Thanks to @SoluableNonagon answer, the correct syntax is:
$scope.filteredItems = [];
var applyFilters = function() {
var items = [];
items = $filter('filter')($scope.items, {passed:false});
items = $filter('filter')(items, $scope.data.searchQuery);
items = $filter('filter')(items, $scope.deepSearch());
$scope.filteredItems = items;
}
you have to inject $filter into your controller
app.controller('myController', function($filter){
Also,
I believe filtering programatically requires a filter name, like so:
$scope.b = $filter('myFilter')($scope.items);
http://jsfiddle.net/MAxrh/
Update:
If you want to filter programatically, and it's just a regular search, then the filter name will be just 'filter'
$filter('filter')(array, expression, comparator) // comparator is optional
the HTML equivalent is:
{{ array | filter : expression : comparator}}
Example: http://plnkr.co/edit/dzPegkZaHOlHWfpVKGEV?p=preview
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With