Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Pipe retornando erro de objeto indefinido

Tenho uma lista que busquei com o get dessa url https://jsonplaceholder.typicode.com/posts queria fazer um filtro igual o mostrado no curso que filtrasse pela propriedade 'body' dessa lista. Segui todos os passos e no último instante tenho o seguinte erro no console:

ERROR TypeError: Cannot read property 'includes' of undefined

fiz um teste no console pra ver se o objeto estava vazio e não estava, com console.log eu consigo imprimir a propriedade title do meu objeto

vou colocar meu código aqui

trecho do código que chama o pipe

<tbody>
    <tr *ngFor="let dado of dados | meFiltra: filtroPesquisa" (click)="delete(dado)">
      <th scope="row">{{dado.userId}}</th>
      <td>{{dado.id}}</td>
      <td>{{dado.title}}</td>
      <td>{{dado.body}}</td>
    </tr>
  </tbody>

E esse é o código do pipe

@Pipe({name: 'meFiltra'})
export class meFiltra implements PipeTransform {
    transform(dados: Dado[], descriptionQuery: string) {
        if(descriptionQuery){
            console.log("descriptionQuery: "+descriptionQuery);//funciona certinho 
            console.log('dado '+dados[1].body);//funciona certinho

            return dados.filter(dado => dado.body.includes(descriptionQuery))//o erro acontece aqui

        }else{
            return dados;
        }
    }
}

Qualquer função que eu coloque retorna com o mesmo erro.

Não imagino o que esteja acontecendo Heeeelp! xD

3 respostas

Não existe dado.body ou dado.body não é um array, por isso ele diz que não pode invocar o includes. Tem que verificar sua API e ver o que dado.body. Faz um print dentro o seu filter para saber o valor de dado.

Veja esse trecho

return dados.filter(dado => dado.body.includes(descriptionQuery))//o erro acontece aqui

Não é dado.includes não? Acho que pela sua API deve ser assim.

:) Fiz mais alguns testes aqui:

console.log((dados.filter(dado => dado.body)));

Isso imprime uma sequência de [{…}, {…}, {…}, {…}, {…}] objetos, no entanto se imprimir assim

console.log('dado '+dados[1].body);

Recebo apenas a propriedade body.

Também fiz esse teste para verificar o tipo de 'dados'

console.log(typeof('Dado '+dados));

O resultado foi "string" Porém quando executo isso:

return dados.filter(dado => dado

Ao adicionar o ponto . o visual studio já sugere os itens que ele tem {userId, id, title, body}

solução!

PessoALL, ontem de manhã rodei o código novamente, sem realizar atualização nenhuma e funcionou 100% ¬¬

Devo ter mexido em algo que necessitava reiniciar o projeto. hehe

xD

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software