Идиоматический способ фильтрации данных в Angular JS

#javascript #angularjs

#javascript #angularjs

Вопрос:

У меня есть некоторая коллекция данных, которые я показываю с помощью ng-repeat директивы:

 myApp.controller("MyCtrl", function ($scope) {
    $scope.products = [...]; // data from server
});

<tr ng-repeat="product in products">
  <td>{{product.name}}</td>
  <td>{{product.price}}</td>
</tr>
  

Также у меня есть несколько кнопок фильтрации: "Newest" , "Popular" и т.д.

И я хочу фильтровать свои данные при нажатии на эти кнопки.

В настоящее время я думаю, что могу просто определить отдельный обработчик событий для каждой этой кнопки в контроллере и программно отфильтровать products переменную:

 myApp.controller("MyCtrl", function ($scope) {
    $scope.products = [...]; // data from server

    $scope.showNewest = function() {
        // here modify the  $scope.products  varialbe so changes will be reflected in UI
    }
});
  

Но я думаю, что это уродливое решение. И я чувствую, что лучший способ — определить пользовательский фильтр, но сейчас у меня нет никаких идей, как должен выглядеть новый фильтр. Итак, какой идиоматический / лучший способ выполнить мою задачу?

Комментарии:

1. Фильтр не делает этого за вас?

2. Как вы сами упомянули, создайте пользовательский фильтр. docs.angularjs.org/api/ng/filter/filter

3. @RobertHarvey @Patrick Reck да, но проблема в том, что я не знаю, как уведомить filter внутри, ng-repeat="product in products | myFilter" какая кнопка была нажата.

4. @IlyaIvanov откуда filterCriteria возьмется?

5. @WelcomeTo из области