0

У меня есть фильтр, который мне нужно использовать два раза (две страницы/контроллеры), фильтруя по категории объектов. Я могу получить эту работу, используя это в каждом контроллере:AngularJS Filter Best Practice

 $scope.$on('category', function (event, arg) { 
       $scope.catSort = arg; 
      });  

    $scope.filterCat = function (item) { 
       return !$scope.catSort ? 
        item : (item.category == $scope.catSort); 
      }; 

HTML, я фильтрация:

<li dnd-draggable="item" ng-repeat="item in items| filter: filterCat"> 
     </li> 

Я поставил $ scope.catSort что и для фильтрации в списке кнопки пользователь может нажать:

<button class="btn btn-default" ng-click="$emit('category', 'all')">Show All</button> 
<button class="btn btn-default" ng-click="$emit('category', 'Common')">Common</button> 

проблема заключается в том, у меня есть еще один HTML-страницу с другим подмножеством категорий, которые мне нужно фильтровать. Вместо того, чтобы просто копировать и вставлять функцию $ scope.filterCat, чтобы снова фильтровать, я хочу создать отдельный фильтр для ввода в каждый контроллер (что лучше всего подходит?).

Так что я начал это для отдельного фильтра:

angular.module("category-filter", []) 
    .filter('filterCat', function() { 
     return function (category, item) { 
      return !category ? 
       product : (item.category == $scope.catSort); 
     } 
    }); 

Вы можете видеть, я пытаюсь получить эту опцию категории, а также. Как я могу охватить сферу охвата и получить категорию? Должен ли я использовать услугу, и на одном из щелчков кнопки задается категория для фильтрации?

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

ответ

1

Передать объект в выражении фильтра: filter:{category: '...', compareTo: '...'} и проверить его внутри функции фильтра.