Фильтрация и сортировка в Ionic Service Factory

0

извините за новичком вопрос. Я хочу добавить фильтрацию и сортировку по имени на мою страницу. Когда я пытаюсь использовать этот код, он все еще работает, когда я использую список элементов из переменной в области контроллера, но после того, как я использую фабрику в services.js, есть две проблемы:

  1. Когда я набираю слово поиска в окне поиска, фильтр работает и показывает только отфильтрованный элемент, но я не могу очистить фильтр еще раз (когда я удаляю слово поиска с обратным пространством, элемент все еще фильтруется)
  2. Заказ больше не работает для сортировки предметов

Вот код: (HTML)

<ion-view view-title="Foods">
    <ion-content class="padding">
        <div class="bar bar-header item-input-inset">
            <label class="item-input-wrapper">
                <i class="icon ion-ios-search placeholder-icon"></i>
                <input type="search" placeholder="Search" ng-model="foodSearch.search">
            </label>

        </div>
        <button class="button button-block button-energized"  ng-click="showOrderOptions()">
            Order by
        </button>
        <div class="list ">


            <a class="item" href="#" ng-hide="isOrderOptionsHide" ng-click="reverse=!reverse;order('name',reverse)">
                Name
            </a>

            <a class="item" href="#" ng-hide="isOrderOptionsHide" ng-click="reverse=!reverse;order('rating',reverse)">
                Rating
            </a>

        </div>
        <ion-list>
        <ion-item class="list card" ng-repeat="food in foods = (foods | filter: filterFood)"
             href="#/tab/foods/{{food.id}}">
            <div class="item item-head">
                <h2 style="text-align:center;"><b>{{food.name}}</b></h2>
                <div class="row">
                    <div class="col item item-image" style="width:100px;height:100px;">
                        <img class="" src="{{food.imageSrc}}" >
                    </div>
                    <div class="col item item-image">
                        <h2>{{food.title}}</h2>
                        <div class="row">
                            <img src="img/smile.jpg" style="width:100%; height:100%; margin-top: -10px;"class="col col-40">
                            <h3 class="col col-60"  >{{food.rating}}</h3>
                        </div>
                    </div>
                </div>
            </div>
        </ion-item>
        </ion-list>
    </ion-content>
</ion-view>

(Controller.js):

.controller('FoodsCtrl', function($scope,Foods,$filter) {
    $scope.foods = Foods.all();
    $scope.remove = function(food) {
        Foods.remove(food);
    };

    $scope.foodSearch = {search: ''};

    $scope.filterFood = function (item){
        return item.title.toLowerCase().indexOf($scope.foodSearch.search.toLowerCase()) >= 0
            ||  item.name.toLowerCase().indexOf($scope.foodSearch.search.toLowerCase()) >= 0;
    }

    $scope.isOrderOptionsHide = true;
    $scope.reverse=true;
    $scope.showOrderOptions = function (){
        $scope.isOrderOptionsHide = !$scope.isOrderOptionsHide;
    }
    var orderBy = $filter('orderBy');

    $scope.order = function(predicate, reverse) {
        $scope.foods = orderBy($scope.foods, predicate, reverse);
        $scope.isOrderOptionsHide = true;
    };
})
  • 0
    что такое filterFood в "food in foods = (foods | filter: filterFood)" , где оно объявлено?
Теги:
ionic

1 ответ

4
Лучший ответ

Просто сделайте это
ng-repeat="food in foods | filter: foodSearch.search | orderBy: 'name'"
Вам не нужно это делать:
$scope.filterFood = function (item){ return item.title.toLowerCase().indexOf($scope.foodSearch.search.toLowerCase())..
автомат углового фильтра делает это.

  • 0
    Большое спасибо, это работает :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню