2
respostas

ion search Filtro de Json

Boa tarde como posso filtrar um json neste formato

[{"famid":1,"famdescricao":"Roupas Básicas","famsigla":"RB","famquantidade":0,"famvisible":true,"roupas":[{"pcrid":1,"pcrcodigo":"01","pcrdescricao":"Calça Jeans/Sport","pcrdescription":"Jeans/Sport","pcrpeso":1,"pcrquantidade":0,"pcrvisible":true},{"pcrid":2,"pcrcodigo":"02","pcrdescricao":"Blusa","pcrdescription":" Blouse","pcrpeso":0.5,"pcrquantidade":0,"pcrvisible":true}]}]

tentei usar o ion-search mas não deu certo

.html

<ion-searchbar placeholder="Buscar roupas" (ionInput)="filterItems($event)"></ion-searchbar>

.ts

  ionViewDidLoad() {    
    this.loadLista();   
  }

  loadLista(){
    let loading = this._loadingCtrl.create({
      content: 'Aguarde o carregamento das peças de roupas...'
    });

    loading.present(); 

    this._selecionarpecasService.lista()
        .subscribe(
          (listapecas) => {
            this.pecasroupas = listapecas;
            console.log(this.pecasroupas);
            loading.dismiss();
          }, (err : HttpErrorResponse) => {
            console.log(err);
            loading.dismiss();
            this.alertCtrl.create({
              title: 'Falha na conexão',
              subTitle: 'Não foi possível listar as peças de roupas. Tente novamente mais tarde!',
              buttons: [
                { text: 'ok' }
              ]
            }).present();
          }  
        );
  }

  filterItems(ev: any) {
    this.loadLista();
    let val = ev.target.value;

    console.log(this.pecasroupas);

    this.pecasroupas.filter(function(item) {
      return item.toLowerCase().includes(val.toLowerCase());   
    });
  }
2 respostas

Boa tarde, Rodrigo! Como vai?

Me parece que o problema está aqui:

this.pecasroupas.filter(function(item) {
     return item.toLowerCase().includes(val.toLowerCase());   
});

Esse array pecasroupas é composto por qual tipo de dado? São strings? Caso não sejam, então o problema é aí mesmo! Supondo que sejam objetos com as propriedades nome e quantidade de cada roupa e que vc queira fazer uma busca pelo nome, então seu código deveria ficar mais ou menos assim:

this.pecasroupas.filter(function(item) {
      return item.nome.toLowerCase().includes(val.toLowerCase());   
});

Vc só precisará adequar o meu exemplo ao seu caso!

Pegou a ideia? Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

Opa grande mestre dos mistérios do IONIC, gosto muito das suas aulas, parabéns. Funcionou perfeito pra filtrar o primeiro nível do JSON mas na verdade eu gostaria de filtrar é o segundo nível na parte de roupas, por exemplo eu quero filtrar o campo pcrdescricao dentro da parte de roupas

[{
 "famid":1,",
 " famdescricao":"Roupas Básicas",
 "famsigla":"RB",
 "famquantidade":0,
 "famvisible":true,
 "roupas":[{
            "pcrid":1,
            "pcrcodigo":"01",
             **"pcrdescricao":"Calça Jeans/Sport",**
             "pcrdescription":"Jeans/Sport",
             "pcrpeso":1, 
             "pcrquantidade":0,
             "pcrvisible":true
             },
             {
             "pcrid":2,
             "pcrcodigo":"02",
             ** "pcrdescricao":"Blusa",**
              "pcrdescription":" Blouse",
               "pcrpeso":0.5,
               "pcrquantidade":0,
               "pcrvisible":true
              }]
}]