Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert view filter into controller filter

Tags:

angularjs

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?


Answer

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;
  }
like image 573
MaximeBernard Avatar asked Nov 26 '25 17:11

MaximeBernard


1 Answers

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

like image 158
SoluableNonagon Avatar answered Nov 29 '25 14:11

SoluableNonagon



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!