2
respostas

Filtros com Checkbox

Estou com o seguinte problema. Preciso filtrar um json que recebo de um ws rest.

O código abaixo é apenas um modelo para teste.

Acredito que o problema esteja na função subCategoriasFilter e não estou conseguindo solucionar.

Quando teste a função com um json simples ( sem sub nós ) funciona bem. Agora desta maneira não obtive sucesso.

Agradeço qualquer ajuda ou alternativa para fazer este tipo de filtragem.

Controller

    $scope.produtos =[{
        codigo: 1,
        descricao: "Cerveja",
        subCategorias: [{
          codigo: 1,
          descricao: "Brahma"
        },{
                    codigo: 2,
                    descricao: "Skol"
                    }]
            },{
        codigo: 2,
        descricao: "Refrigerante",
        subCategorias: [{
          codigo: 1,
          descricao: "Coca"
        },{
                    codigo: 2,
                    descricao: "Guaraná"
                    }]
            }];


    $scope.filtroIncludes = [];

    $scope.includeFilter = function(filter) {
        var i = $.inArray(filter, $scope.filtroIncludes);
        if (i > -1) {
            $scope.filtroIncludes.splice(i, 1);
        } else {
            $scope.filtroIncludes.push(filter);
        }
    }

    $scope.subCategoriasFilter = function(produto) {
        if ($scope.filtroIncludes.length > 0) {
            for(var i = 1; i < produto.subCategorias.length; i++) {

                if ($.inArray(produto.subCategorias[i].descricao, $scope.filtroIncludes) < 0)
                return;
          }

        }

        return produto;
    }

View


        <input type="checkbox" ng-click="includeFilter('Coca')"/> Coca</br/>
        <input type="checkbox" ng-click="includeFilter('Guaraná')"/> Guaraná</br/>
        <input type="checkbox" ng-click="includeFilter('Skol')"/> Skol</br/>
        <input type="checkbox" ng-click="includeFilter('Brahma')"/> Brahma</br/>

        <ul ng-repeat="produto in produtos | filter:subCategoriasFilter">
            <li ng-repeat="subCategoria in produto.subCategorias">
                  {{produto.descricao}} - {{subCategoria.descricao}}
            </li>
        </ul>

        Filter dump: {{filtroIncludes}}
2 respostas

exemplo do código rodando. Talvez (me) ajude. http://jsfiddle.net/65Pyj/738/

não entendi muito bem oque você que fazer, você pode explicar melhor ?