How can I filter both by Category and by Price?

2

I have 2 filter buttons:

  • Sort by price - That works.
  • Sort by Category - Does not Work.
  • I would like to run the filter both by price and by category.

    Both are modal and I'm doing the following:

    O Sort by price:

    View strand calling modal:

    <!-- ORDENA POR PREÇO -->
                    <button class="button button-stable button-block  icon-left ion-android-restaurant" modal-select="" ng-model="someModel" options="selectableNames" option-property="role" modal-title="Ordenar por...">Ordenar
                    <div class="option">
                          <h1>{{option.name}}</h1>
                    </div>
                   </button>              
    

    No Controller looks like this:

        // ORDENA POR...
        $scope.selectableNames =  [
        {name : "Por preço: Do Menor para o Maior", role : "+cadastra_oferta_valor_com_desconto"}, 
        { name : "Por preço: Do Maior para o Menor", role : "-cadastra_oferta_valor_com_desconto"},    
      ];
    
    
        $scope.getOpt = function(option){     
            return option.name + ":" + option.role;          
        };  
        // FIM DE ORDENA POR
    

    And the Filter, returning the screen looks like this:

    <div class="card" ng-repeat="item in ofertass | orderBy: someModel" ng-init="$last ? fireEvent() : null" href="#/nhaac/ofertas_singles/{{item.cadastra_oferta_cod_oferta}}" >   
    

    This part is okay!

    Now let's get into the problem?

    To sort by category, I've created a modal where only filter the categories being shown to the user:

    <ion-view view-title="Escolha as Categorias" hide-nav-bar="false" >
      <ion-content>
    
            <div class="button-bar">    
                <button class="button button-stable button-block  icon-left ion-android-funnel" ng-click="userCategoria(categoria_comida_nome)">Aplicar Filtro</button>
            </div>
    
        <ion-list>
          <ion-checkbox ng-repeat="item in ofertass | unique:'categoria_comida_nome'" ng-model="checkItems[item.categoria_comida_nome]" ng-change="print()">{{item.categoria_comida_nome}}</ion-checkbox>
        </ion-list>
    
        <div class="button-bar">    
            <button class="button button-stable button-block  icon-left ion-android-funnel" ng-click="userCategoria()">Aplicar Filtro</button>
        </div>
    
    
      </ion-content>
    </ion-view>    
    

    The controller of this modal is like this:

    // PEGA OS ITENS SELECIONADOS NA MODAL E COLOCA NUM ARRAY
        $scope.checkItems = { };
    
        $scope.print = function() {
            console.log($scope.checkItems);
    
        }   
    
        $scope.save = function() {
            var array = [];
            for(i in $scope.checkItems) {
                console.log($scope.checkItems[i]);
                if($scope.checkItems[i] == true) {
                    array.push(i);
                }
            }
            console.log(array);       
            $state.go("nhaac.promocoes");
        }
    
    
        // INICIA FILTRO POR CATEGORIA    
          $ionicModal.fromTemplateUrl('/templates/filters/side-filter.html', {
            scope: $scope,
            animation: 'slide-in-up'
          }).then(function(modal) {
            $scope.modal = modal;
          });
          $scope.abreModal = function() {
            $scope.modal.show();
          };
         $scope.closeModal = function() {    
              $scope.modal.hide();
    
    
          };
          // Cleanup the modal when we're done with it!
          $scope.$on('$destroy', function() {
            $scope.modal.remove();
          });
          // Execute action on hide modal
          $scope.$on('modal.hidden', function() {
            // Execute action
          });
          // Execute action on remove modal
          $scope.$on('modal.removed', function() {
            // Execute action
          });
    
        // FIM FILTRO POR CATEGORIA
    

    My call to this modal is like this:

     <button class="button button-stable button-block icon-left ion-android-funnel"ng-model="someModel" ng-click="checkItems[item.categoria_comida_nome]" ui-sref="filtroPromo">Filtrar                    
                       </button>              
    

    It prints the selected categories in the console, but I'm not able to send this array back and apply it to the filter, which looks like this:

    <div class="card" ng-repeat="item in ofertass | orderBy: someModel" ng-init="$last ? fireEvent() : null" href="#/nhaac/ofertas_singles/{{item.cadastra_oferta_cod_oferta}}" >       
    

    The Doubt: How can I filter both by Category and by Price? What am I doing wrong?

    JUST ILLUSTRATE 100%, FOLLOWS ALL THE CONTROLLER AND THEN ALL THE MAIN VIEW:

        .controller("promocoesCtrl", function($scope,$rootScope,$state,$ionicScrollDelegate,$http,$httpParamSerializer,$stateParams,$timeout,$ionicLoading,$ionicPopup,$ionicPopover,$ionicSlideBoxDelegate,$ionicHistory,ionicMaterialInk,ionicMaterialMotion,$ionicModal, sharedCartService,sharedFilterService){
    
        //put cart after menu
        var cart = sharedCartService.cart;
    
        // ORDENA POR...
        $scope.selectableNames =  [
        {name : "Por preço: Do Menor para o Maior", role : "+cadastra_oferta_valor_com_desconto"}, 
        { name : "Por preço: Do Maior para o Menor", role : "-cadastra_oferta_valor_com_desconto"},    
      ];
    
    
        $scope.getOpt = function(option){     
            return option.name + ":" + option.role;          
        };  
        // FIM DE ORDENA POR
    
    // PEGA OS ITENS SELECIONADOS NA MODAL E COLOCA NUM ARRAY
        $scope.checkItems = { };
    
        $scope.print = function() {
            console.log($scope.checkItems);
    
        }
    
            // APLICANDO FILTRO CATEGORIA
            $scope.userCategoria = function(checkItems) {
                console.log("entra na chamada");
    //          $scope.userCategoria = $scope.checkItems(function(element) {
                    $scope.checkItems;
                    console.log("Imprime array");
                    console.log($scope.checkItems);
    //          };
    //            console.log("Imprime array");
    //          console.log($scope.userCategoria);
                $scope.modal.hide();
                $state.go("nhaac.ofertas_restaurante");
            };
    
        $scope.save = function() {
            var array = [];
            for(i in $scope.checkItems) {
                console.log($scope.checkItems[i]);
                if($scope.checkItems[i] == true) {
                    array.push(i);
                }
            }
            console.log(array);       
            $state.go("nhaac.promocoes");
        }
    
    
        // INICIA FILTRO POR CATEGORIA    
          $ionicModal.fromTemplateUrl('/templates/filters/side-filter.html', {
            scope: $scope,
            animation: 'slide-in-up'
          }).then(function(modal) {
            $scope.modal = modal;
          });
          $scope.abreModal = function() {
            $scope.modal.show();
          };
         $scope.closeModal = function() {    
              $scope.modal.hide();
    
    
          };
          // Cleanup the modal when we're done with it!
          $scope.$on('$destroy', function() {
            $scope.modal.remove();
          });
          // Execute action on hide modal
          $scope.$on('modal.hidden', function() {
            // Execute action
          });
          // Execute action on remove modal
          $scope.$on('modal.removed', function() {
            // Execute action
          });
    
    
    
    
    
        // FIM FILTRO POR CATEGORIA
    
    
        $rootScope.page_id = "promocoes" ;
        $scope.scrollTop = function(){
            $ionicScrollDelegate.$getByHandle("top").scrollTop();
        };
        // open external browser 
        $scope.openURL = function($url){
            window.open($url,"_system","location=yes");
        };
        // open AppBrowser
        $scope.openAppBrowser = function($url){
            window.open($url,"_blank","closebuttoncaption=Done");
        };
        // open WebView
        $scope.openWebView = function($url){
            window.open($url,"_self");
        };
    
        // Set Motion
        $timeout(function(){
            ionicMaterialMotion.slideUp({
                selector: ".slide-up"
            });
        }, 300);
    
        var targetQuery = ""; //default param
        var raplaceWithQuery = "";
        // TODO: Dinamics Promoções
        targetQuery = "json=promocao"; //default param
        raplaceWithQuery = "json=promocao";
    
    
        var fetch_per_scroll = 1;
        // animation loading 
        $ionicLoading.show({
            template: '<div class="loader"><svg class="circular"><circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"/></svg></div>'
        });
    
    
        $scope.noMoreItemsAvailable = false; //readmore status
        var lastPush = 0;
        var data_ofertass = [];
    
        if(window.localStorage.getItem("data_ofertass") !== "undefined"){
            data_ofertass = JSON.parse(window.localStorage.getItem("data_ofertass"));
                if (data_ofertass !== null){
                $scope.ofertass = [];
                for(lastPush = 0; lastPush < 10; lastPush++) {
                    if (angular.isObject(data_ofertass[lastPush])){
                        $scope.ofertass.push(data_ofertass[lastPush]);
                    };
                }
                $timeout(function() {
                    $ionicLoading.hide();
                }, 500);
            }
        }
        if(!angular.isObject(data_ofertass)){
            $timeout(function() {
            // retry retrieving data
            $http.get("http://vovocooks.com.br/admin/apis/api_listagem/lista_oferta_api.php?json=promocao".replace(targetQuery,raplaceWithQuery)).then(function(response) {
                data_ofertass = response.data;
                if(typeof(Storage) != "undefined"){
                    try {
                        window.localStorage.setItem("data_ofertass",JSON.stringify(data_ofertass));
                    } catch(e) {
                        window.localStorage.clear();
                        window.localStorage.setItem("data_ofertass",JSON.stringify(data_ofertass));
                        $ionicHistory.clearCache();
                        $ionicHistory.clearHistory();
                        $state.reload();
                        $scope.$state = $state;
                    }
                }
                $scope.ofertass = [];
                for(lastPush = 0; lastPush < 100; lastPush++) {
                    if (angular.isObject(data_ofertass[lastPush])){
                        $scope.ofertass.push(data_ofertass[lastPush]);
                    };
                }
            },function(response) {
                // error message
                var alertPopup = $ionicPopup.alert({
                    title: "error " + response.status,
                    template: response.statusText + "<br/>problem: table ofertas",
                });
            }).finally(function() {
                $scope.$broadcast("scroll.refreshComplete");
                // event done, hidden animation loading
                $timeout(function() {
                    $ionicLoading.hide();
                }, 1000);
            });
    
            }, 1000);
        }   
    
    
    
        $scope.doRefresh = function(){
            // retry retrieving data
            window.localStorage.clear();
            $http.get( "http://vovocooks.com.br/admin/apis/api_listagem/lista_oferta_api.php?json=promocao".replace(targetQuery,raplaceWithQuery)).then(function(response) {
                data_ofertass = response.data;
                if(typeof(Storage) != "undefined"){
                    try {
                        window.localStorage.setItem("data_ofertass",JSON.stringify(data_ofertass));
                    } catch(e) {
                        window.localStorage.clear();
                        window.localStorage.setItem("data_ofertass",JSON.stringify(data_ofertass));
                        $ionicHistory.clearCache();
                        $ionicHistory.clearHistory();
                        $state.reload();
                        $scope.$state = $state;
                    }
                }
                $scope.ofertass = [];
                for(lastPush = 0; lastPush < 100; lastPush++) {
                    if (angular.isObject(data_ofertass[lastPush])){
                        $scope.ofertass.push(data_ofertass[lastPush]);
                    };
                }
            },function(response) {
                // error message
                var alertPopup = $ionicPopup.alert({
                    title: "error " + response.status,
                    template: response.statusText + "<br/>problem: table ofertas",
                });
            }).finally(function() {
                $scope.$broadcast("scroll.refreshComplete");
                // event done, hidden animation loading
                $timeout(function() {
                    $ionicLoading.hide();
                }, 500);
            });
    
    
    
        };
    
    
        if (data_ofertass === null){
            data_ofertass = [];
        };
    
    
    
        //add to cart function
         $scope.addToCart=function(id,image,name,price){    
            // CHAMA CART.ADD DE SERVICES 
            cart.add(id,image,name,price,1);    
    
         };   
    
    
    
    
    
        // animation readmore
        var fetchItems = function() {
            for(var z=0;z<fetch_per_scroll;z++){
                if (angular.isObject(data_ofertass[lastPush])){
                    $scope.ofertass.push(data_ofertass[lastPush]);
                    lastPush++;
                }else{;
                    $scope.noMoreItemsAvailable = true;
                }
            }
            $scope.$broadcast("scroll.infiniteScrollComplete");
        };
    
        // event readmore
        $scope.onInfinite = function() {
            $timeout(fetchItems, 500);
        };
    
        // create animation fade slide in right (ionic-material)
        $scope.fireEvent = function(){
            ionicMaterialMotion.fadeSlideInRight();
            ionicMaterialInk.displayEffect();
        };
    
    
        // animation ink (ionic-material)
        ionicMaterialInk.displayEffect();
        $scope.rating = {};
        $scope.rating.max = 5;
    })
    

    THE MAIN VIEW

     <ion-view view-title="Promoções" hide-nav-bar="false" >
            <!-- content -->
    
            <!-- BOTÃO CARRINHO DE COMPRAS -->
                <ion-nav-buttons side="right"   >           
                        <a  href="#/nhaac/carrinho" class="button button-icon icon ion-android-cart" > {{total}} </a>               
                </ion-nav-buttons>
    
            <ion-content delegate-handle="top" lazy-scroll  id="page-promocoes" class="has-header page-promocoes">
    
                    <ion-refresher pulling-text="Puxe para atualizar..."  on-refresh="doRefresh()"></ion-refresher>
                <ion-list class="list card">
                    <div class="item item-input">
                        <i class="icon ion-search placeholder-icon"></i>
                        <input type="search" ng-model="q" placeholder="Procurar" aria-label="filter restaurantess" />
                    </div>
                </ion-list>
    
    
                <div class="button-bar">      
    
                         <!-- FILTRA POR... -->
                     <!--    <button class="button button-stable button-block icon-left ion-android-funnel" ng-click="abreModal()">Filtrar</button> -->
    
            <!--        <a class="button button-stable button-block icon-left ion-android-funnel" ng-model="someModel" options="checkItems[item.categoria_comida_nome]" ui-sref="filtroPromo">Filtrar</a> -->                 
    
                        <button class="button button-stable button-block icon-left ion-android-funnel"ng-model="someModel" ng-click="checkItems[item.categoria_comida_nome]" ui-sref="filtroPromo">Filtrar                    
                       </button>              
    
                       <!--   <button class="button button-stable button-block icon-left ion-android-funnel" >
                             Filtrar           
                         </button> -->      
    
    
                        <!-- ORDENA POR PREÇO -->
                        <button class="button button-stable button-block  icon-left ion-android-restaurant" modal-select="" ng-model="someModel" options="selectableNames" option-property="role" modal-title="Ordenar por...">Ordenar
                        <div class="option">
                              <h1>{{option.name}}</h1>
                        </div>
                       </button>              
    
                </div>
    
    
    
    
                <div class="list animate-fade-slide-in-right">
    
                    <div class="card" ng-repeat="item in ofertass | orderBy: someModel" ng-init="$last ? fireEvent() : null" href="#/nhaac/ofertas_singles/{{item.cadastra_oferta_cod_oferta}}" >       
    
    
    
                        <div class="item item-thumbnail-top item-text-wrap">
                            <img class="imagemCapa" image-lazy-loader="lines" image-lazy-src="{{item.cadastra_oferta_foto}}"/>
                            <div class="promocao"><b>{{item.cadastra_oferta_desconto}}% OFF</b></div>
                            <div class="desconto"><b>Apenas: R$ {{item.cadastra_oferta_valor_com_desconto}}</b></div>
    
                            <div class="item"><h2><b>{{item.cadastra_oferta_titulo_promocao}}</b></h2></div>
    
                            <div class="item">
                                <h3>Categoria: {{item.categoria_comida_nome}}</h3>
                                <h3>
                                    Preço Normal: <s><small class="preco">R$ {{item.cadastra_oferta_valor_sem_desconto}}</small></s><br>
                                    Preço Promocional <small class="preco">R$ {{item.cadastra_oferta_valor_com_desconto}} </small>
                              </h3>         
                                <div class="to_trusted" ng-bind-html="item.cadastra_oferta_descricao"></div>
                            </div>    
                    </div>
    
                        <div>
                            <center><p style="position:relative;right:10px;bottom:0px;top:1px">
                                    <a  ng-click="addToCart(item.cadastra_oferta_cod_oferta,item.cadastra_oferta_foto, item.cadastra_oferta_titulo_promocao,item.cadastra_oferta_valor_com_desconto)" class="button button-assertive button-clear icon-left ion-android-cart"> Pedir Já </a> 
                            </p></center>
                        </div>
    
    
                        <a class="item button button-clear button-dark ink" href="#nhaac/ofertas_singles/{{item.cadastra_oferta_cod_oferta}}">MAIS INFORMAÇÕES</a>
                    </div>
                </div>
                <ion-list class="list">
                <ion-infinite-scroll ng-if="!noMoreItemsAvailable" on-infinite="onInfinite()" distance="5px" ng-if="hasMoreData"></ion-infinite-scroll>
                </ion-list>
    
                <ion-list class="list">
                    <div class="item" ng-if="results.length == 0" >
                        <p>Nenhum resultado encontrado...</p>
                    </div>
                </ion-list>
    
    
                <ion-infinite-scroll ng-if="!noMoreItemsAvailable" on-infinite="loadMore()" distance="10%">
                <ion-infinite-scroll-content loadingSpinner="bubbles">
            </ion-infinite-scroll>
    
    
    
            </ion-content>
            <!-- ./content -->
        </ion-view>
    
        
    asked by anonymous 01.11.2016 / 13:59

    2 answers

    1

    If what I understand is that you want to sort by 2 fields, take a look here at this answer , has even a jsfiddle.

    But already advancing, for you to sort by multi fields do:

    ng-repeat="array | orderBy: ['preco', 'categoria']"
    

    Thus, it is taken into account that the objects in your array have the attributes preco and categoria .

    Example:

    var array = [
        { nome: 'item 1', preco: 1, categoria: 'X' },
        { nome: 'item 1', preco: 1, categoria: 'Y' },
        { nome: 'item 1', preco: 1, categoria: 'Z' },
        { nome: 'item 1', preco: 2, categoria: 'X' },
        { nome: 'item 1', preco: 3, categoria: 'Y' },
        { nome: 'item 1', preco: 2, categoria: 'X' },
        { nome: 'item 1', preco: 5, categoria: 'Z' },
    ]
    

    The ordering will always happen from left to right, that is, it will be sorted by price, then sorted by category, always keeping the order predecessor.

        
    01.11.2016 / 14:29
    2

    Correct me if I am wrong, but it seems to me that you want sorting and not filtering.

    The following example uses data obtained from the URL mentioned in the code to perform ordering on two fields based on OrderBy directly on your ng-repeat :

    angular.module('myApp', [])
    .controller('myController', function($scope){
    
      // Parâmetros preservados no $scope para que possamos utilizar no ng-repeat
      $scope.orderParms = {
        categoria: 'cadastra_oferta_titulo_promocao',
        valor: 'cadastra_oferta_valor_com_desconto'
      }
    
      $scope.flipParm = function(p){
    
      // OrderBy utiliza o caracter '-' (menos) para indicar ordenação inversa.
      // Essa função remove ou adiciona o caracter à especificação de ordenação.
    
        var tmp = $scope.orderParms[p];
        tmp = (tmp[0] == "-" ? tmp.substr(1) : "-" + tmp);
    
        $scope.orderParms[p] = tmp;
    
      };
    
      // http://vovocooks.com.br/admin/apis/api_listagem/lista_oferta_api.php?json=promocao
      $scope.conteudo = [
        {
          "cadastra_oferta_cod_oferta": "7",
          "fornecedores.nome": "Salgados Fritos",
          "fornecedores.CPF": "02715938659",
          "fornecedores.identidade": "",
          "fornecedores.bairro": "Centro",
          "fornecedores.celular": "34999688888",
          "fornecedores.cep": "38300134",
          "fornecedores.cidade": "Ituiutaba",
          "fornecedores.cod_fornecedor": "3",
          "fornecedores.complemento": "",
          "fornecedores.data_hora_cadastro": "2016-10-10 13:58:05",
          "fornecedores.email": "[email protected]",
          "fornecedores.estado": "MG",
          "fornecedores.logradourro": "Avenida Quinze",
          "fornecedores.numero": "950",
          "fornecedores.responsavel_contato": "ANDRE",
          "fornecedores.telefone_empresa": "34999688888",
          "fornecedores.telefone_responsavel": "",
          "cadastra_oferta_foto": "http://vovocooks.com.br/admin/vovos/_lib/file/img/app_img/coxinha.jpg",
          "cadastra_oferta_titulo_promocao": "Coxinha Frita - 100 unidades",
          "cadastra_oferta_cod_fornecedor": "3",
          "cadastra_oferta_cod_categoria": null,
          "cadastra_oferta_descricao": "Deliciosa coxinha frita!!!",
          "cadastra_oferta_igredientes": "",
          "cadastra_oferta_tipo_tamanho": "",
          "cadastra_oferta_valor_sem_desconto": "35.00",
          "cadastra_oferta_valor_com_desconto": "25.00",
          "cadastra_oferta_desconto": "28.57",
          "cadastra_oferta_validade_oferta": "2016-10-31",
          "cadastra_oferta_qtd_estoque": "20",
          "categoria_comida_cod_categoria_com": "54",
          "categoria_comida_data_cadastro": "2016-10-07 23:22:53",
          "categoria_comida_nome": "Salgados Fritos",
          "fornecedor_credito_cod_fornecedor": "3",
          "fornecedor_credito_cod_fornecedor_codigo": "3",
          "fornecedor_credito_qtd_credito": "10"
        },
        {
          "cadastra_oferta_cod_oferta": "3",
          "fornecedores.nome": "Pizzas",
          "fornecedores.CPF": "02727671660",
          "fornecedores.identidade": "m6925660",
          "fornecedores.bairro": "Setor Sul",
          "fornecedores.celular": "34999688877",
          "fornecedores.cep": "38300026",
          "fornecedores.cidade": "Ituiutaba",
          "fornecedores.cod_fornecedor": "2",
          "fornecedores.complemento": "",
          "fornecedores.data_hora_cadastro": "2016-10-06 12:25:34",
          "fornecedores.email": "[email protected]",
          "fornecedores.estado": "MG",
          "fornecedores.logradourro": "Rua Trinta e Cinco",
          "fornecedores.numero": "1212",
          "fornecedores.responsavel_contato": "André Gouveia Nascimento Vilela de Lima",
          "fornecedores.telefone_empresa": "34999688877",
          "fornecedores.telefone_responsavel": "",
          "cadastra_oferta_foto": "http://vovocooks.com.br/admin/vovos/_lib/file/img/app_img/Pizza Calabresa.jpeg",
          "cadastra_oferta_titulo_promocao": "Pizza Grande de Calabresa + Coca-Cola 2 Litros!!!",
          "cadastra_oferta_cod_fornecedor": "2",
          "cadastra_oferta_cod_categoria": null,
          "cadastra_oferta_descricao": "Deliciosa Pizza de Calabresa....",
          "cadastra_oferta_igredientes": "<p>Calabresa, Mussarela, Molho de Tomate, Cebola e Azeitona!!!</p>",
          "cadastra_oferta_tipo_tamanho": "",
          "cadastra_oferta_valor_sem_desconto": "35.00",
          "cadastra_oferta_valor_com_desconto": "30.00",
          "cadastra_oferta_desconto": "14.28",
          "cadastra_oferta_validade_oferta": "2016-10-31",
          "cadastra_oferta_qtd_estoque": "50",
          "categoria_comida_cod_categoria_com": "44",
          "categoria_comida_data_cadastro": "2016-07-07 13:55:38",
          "categoria_comida_nome": "Pizzas",
          "fornecedor_credito_cod_fornecedor": "2",
          "fornecedor_credito_cod_fornecedor_codigo": "2",
          "fornecedor_credito_qtd_credito": "10"
        },
        {
          "cadastra_oferta_cod_oferta": "4",
          "fornecedores.nome": "Pizzas",
          "fornecedores.CPF": "02727671660",
          "fornecedores.identidade": "m6925660",
          "fornecedores.bairro": "Setor Sul",
          "fornecedores.celular": "34999688877",
          "fornecedores.cep": "38300026",
          "fornecedores.cidade": "Ituiutaba",
          "fornecedores.cod_fornecedor": "2",
          "fornecedores.complemento": "",
          "fornecedores.data_hora_cadastro": "2016-10-06 12:25:34",
          "fornecedores.email": "[email protected]",
          "fornecedores.estado": "MG",
          "fornecedores.logradourro": "Rua Trinta e Cinco",
          "fornecedores.numero": "1212",
          "fornecedores.responsavel_contato": "André Gouveia Nascimento Vilela de Lima",
          "fornecedores.telefone_empresa": "34999688877",
          "fornecedores.telefone_responsavel": "",
          "cadastra_oferta_foto": "http://vovocooks.com.br/admin/vovos/_lib/file/img/app_img/F C.jpeg",
          "cadastra_oferta_titulo_promocao": "Pizza Grande de Frango com Catupiry + Coca Cola 2 Litros!!!",
          "cadastra_oferta_cod_fornecedor": "2",
          "cadastra_oferta_cod_categoria": null,
          "cadastra_oferta_descricao": "Deliciosa Pizza de Frango com Catupiry",
          "cadastra_oferta_igredientes": "<p>Frango, Mussarela, Catupiry e Azeitona!!!</p>",
          "cadastra_oferta_tipo_tamanho": "",
          "cadastra_oferta_valor_sem_desconto": "35.00",
          "cadastra_oferta_valor_com_desconto": "28.00",
          "cadastra_oferta_desconto": "20.00",
          "cadastra_oferta_validade_oferta": "2016-10-31",
          "cadastra_oferta_qtd_estoque": "70",
          "categoria_comida_cod_categoria_com": "44",
          "categoria_comida_data_cadastro": "2016-07-07 13:55:38",
          "categoria_comida_nome": "Pizzas",
          "fornecedor_credito_cod_fornecedor": "2",
          "fornecedor_credito_cod_fornecedor_codigo": "2",
          "fornecedor_credito_qtd_credito": "10"
        },
        {
          "cadastra_oferta_cod_oferta": "5",
          "fornecedores.nome": "Confeitarias & Quitandas",
          "fornecedores.CPF": "02715938659",
          "fornecedores.identidade": "",
          "fornecedores.bairro": "Centro",
          "fornecedores.celular": "34999688888",
          "fornecedores.cep": "38300134",
          "fornecedores.cidade": "Ituiutaba",
          "fornecedores.cod_fornecedor": "3",
          "fornecedores.complemento": "",
          "fornecedores.data_hora_cadastro": "2016-10-10 13:58:05",
          "fornecedores.email": "[email protected]",
          "fornecedores.estado": "MG",
          "fornecedores.logradourro": "Avenida Quinze",
          "fornecedores.numero": "950",
          "fornecedores.responsavel_contato": "ANDRE",
          "fornecedores.telefone_empresa": "34999688888",
          "fornecedores.telefone_responsavel": "",
          "cadastra_oferta_foto": "http://vovocooks.com.br/admin/vovos/_lib/file/img/app_img/kibe(1).jpg",
          "cadastra_oferta_titulo_promocao": "Quibe Frito - 100 unidades",
          "cadastra_oferta_cod_fornecedor": "3",
          "cadastra_oferta_cod_categoria": null,
          "cadastra_oferta_descricao": "Quibe frito!!!",
          "cadastra_oferta_igredientes": "",
          "cadastra_oferta_tipo_tamanho": "",
          "cadastra_oferta_valor_sem_desconto": "35.00",
          "cadastra_oferta_valor_com_desconto": "25.00",
          "cadastra_oferta_desconto": "28.57",
          "cadastra_oferta_validade_oferta": "2016-10-31",
          "cadastra_oferta_qtd_estoque": "20",
          "categoria_comida_cod_categoria_com": "46",
          "categoria_comida_data_cadastro": "2016-07-07 13:57:05",
          "categoria_comida_nome": "Confeitarias & Quitandas",
          "fornecedor_credito_cod_fornecedor": "3",
          "fornecedor_credito_cod_fornecedor_codigo": "3",
          "fornecedor_credito_qtd_credito": "10"
        },
        {
          "cadastra_oferta_cod_oferta": "6",
          "fornecedores.nome": "Salgados Fritos",
          "fornecedores.CPF": "02715938659",
          "fornecedores.identidade": "",
          "fornecedores.bairro": "Centro",
          "fornecedores.celular": "34999688888",
          "fornecedores.cep": "38300134",
          "fornecedores.cidade": "Ituiutaba",
          "fornecedores.cod_fornecedor": "3",
          "fornecedores.complemento": "",
          "fornecedores.data_hora_cadastro": "2016-10-10 13:58:05",
          "fornecedores.email": "[email protected]",
          "fornecedores.estado": "MG",
          "fornecedores.logradourro": "Avenida Quinze",
          "fornecedores.numero": "950",
          "fornecedores.responsavel_contato": "ANDRE",
          "fornecedores.telefone_empresa": "34999688888",
          "fornecedores.telefone_responsavel": "",
          "cadastra_oferta_foto": "http://vovocooks.com.br/admin/vovos/_lib/file/img/app_img/kibe.jpg",
          "cadastra_oferta_titulo_promocao": "Quibre Frito - 100 uni",
          "cadastra_oferta_cod_fornecedor": "3",
          "cadastra_oferta_cod_categoria": null,
          "cadastra_oferta_descricao": "Delicioso Quibre Frito",
          "cadastra_oferta_igredientes": "",
          "cadastra_oferta_tipo_tamanho": "",
          "cadastra_oferta_valor_sem_desconto": "35.00",
          "cadastra_oferta_valor_com_desconto": "25.00",
          "cadastra_oferta_desconto": "28.57",
          "cadastra_oferta_validade_oferta": "2016-10-31",
          "cadastra_oferta_qtd_estoque": "20",
          "categoria_comida_cod_categoria_com": "54",
          "categoria_comida_data_cadastro": "2016-10-07 23:22:53",
          "categoria_comida_nome": "Salgados Fritos",
          "fornecedor_credito_cod_fornecedor": "3",
          "fornecedor_credito_cod_fornecedor_codigo": "3",
          "fornecedor_credito_qtd_credito": "10"
        },
        {
          "cadastra_oferta_cod_oferta": "1",
          "fornecedores.nome": "Temakes",
          "fornecedores.CPF": "03472925698",
          "fornecedores.identidade": "",
          "fornecedores.bairro": "Setor Norte",
          "fornecedores.celular": "34999999999",
          "fornecedores.cep": "38300070",
          "fornecedores.cidade": "Ituiutaba",
          "fornecedores.cod_fornecedor": "1",
          "fornecedores.complemento": "",
          "fornecedores.data_hora_cadastro": "2016-10-05 13:25:13",
          "fornecedores.email": "[email protected]",
          "fornecedores.estado": "MG",
          "fornecedores.logradourro": "Rua Dezesseis",
          "fornecedores.numero": "1511",
          "fornecedores.responsavel_contato": "Ramos de Souza Janones",
          "fornecedores.telefone_empresa": "03432610020",
          "fornecedores.telefone_responsavel": "",
          "cadastra_oferta_foto": "http://vovocooks.com.br/admin/vovos/_lib/file/img/app_img/rocambole.jpg",
          "cadastra_oferta_titulo_promocao": "Rocambole de Prestígio Gelado",
          "cadastra_oferta_cod_fornecedor": "1",
          "cadastra_oferta_cod_categoria": null,
          "cadastra_oferta_descricao": "Delicioso rocambole recheado de Prestígio gelado com coberto com castanhas de caju.",
          "cadastra_oferta_igredientes": "<ul>\n<li>Chocolate.</li>\n<li>Leite consensado.</li>\n<li>Chocolates em pedaços;</li>\n<li>Coco-Ralado.</li>\n</ul>",
          "cadastra_oferta_tipo_tamanho": "",
          "cadastra_oferta_valor_sem_desconto": "60.00",
          "cadastra_oferta_valor_com_desconto": "50.00",
          "cadastra_oferta_desconto": "16.66",
          "cadastra_oferta_validade_oferta": "2016-10-31",
          "cadastra_oferta_qtd_estoque": "20",
          "categoria_comida_cod_categoria_com": "45",
          "categoria_comida_data_cadastro": "2016-07-07 13:56:05",
          "categoria_comida_nome": "Temakes",
          "fornecedor_credito_cod_fornecedor": "1",
          "fornecedor_credito_cod_fornecedor_codigo": "1",
          "fornecedor_credito_qtd_credito": "10"
        },
        {
          "cadastra_oferta_cod_oferta": "2",
          "fornecedores.nome": "Temakes",
          "fornecedores.CPF": "03472925698",
          "fornecedores.identidade": "",
          "fornecedores.bairro": "Setor Norte",
          "fornecedores.celular": "34999999999",
          "fornecedores.cep": "38300070",
          "fornecedores.cidade": "Ituiutaba",
          "fornecedores.cod_fornecedor": "1",
          "fornecedores.complemento": "",
          "fornecedores.data_hora_cadastro": "2016-10-05 13:25:13",
          "fornecedores.email": "[email protected]",
          "fornecedores.estado": "MG",
          "fornecedores.logradourro": "Rua Dezesseis",
          "fornecedores.numero": "1511",
          "fornecedores.responsavel_contato": "Ramos de Souza Janones",
          "fornecedores.telefone_empresa": "03432610020",
          "fornecedores.telefone_responsavel": "",
          "cadastra_oferta_foto": "http://vovocooks.com.br/admin/vovos/_lib/file/img/app_img/trufadomorango.jpg",
          "cadastra_oferta_titulo_promocao": "Trufado De Morango",
          "cadastra_oferta_cod_fornecedor": "1",
          "cadastra_oferta_cod_categoria": null,
          "cadastra_oferta_descricao": "Sobremesa gelada composta por uma camada de trufado, morangos, chantily. Decorado com detalhes em chocolate e morangos.",
          "cadastra_oferta_igredientes": "<p><span>obremesa gelada composta por uma camada de trufado, morangos, chantily. Decorado com detalhes em chocolate e morangos.</span></p>",
          "cadastra_oferta_tipo_tamanho": "",
          "cadastra_oferta_valor_sem_desconto": "70.00",
          "cadastra_oferta_valor_com_desconto": "40.00",
          "cadastra_oferta_desconto": "42.85",
          "cadastra_oferta_validade_oferta": "2016-12-31",
          "cadastra_oferta_qtd_estoque": "3",
          "categoria_comida_cod_categoria_com": "45",
          "categoria_comida_data_cadastro": "2016-07-07 13:56:05",
          "categoria_comida_nome": "Temakes",
          "fornecedor_credito_cod_fornecedor": "1",
          "fornecedor_credito_cod_fornecedor_codigo": "1",
          "fornecedor_credito_qtd_credito": "10"
        }
      ];
    
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular.js"></script><divng-app="myApp">
      <div ng-controller='myController'>
        
        Parâmetros de ordenação: 
        <pre>{{orderParms | json}}</pre>
        
        <button ng-click="flipParm('categoria');">Categoria</button>
        <button ng-click="flipParm('valor');">Valor</button>
        
        
        <div ng-repeat = "i in conteudo | orderBy:[orderParms.valor, orderParms.categoria]">
          {{i.cadastra_oferta_titulo_promocao}} <b style="color:red;">{{i.cadastra_oferta_valor_com_desconto}}</b> <i style="color:#888;">{{i.cadastra_oferta_descricao}}</i>
        </div>
        
      </div>
    </div>
        
    01.11.2016 / 14:34