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

Não está sendo possível filtrar tarefa por conjunto de palavras com 'espaço'

Problema: Quando inserido um conjunto de palavras dentro do input, o método trim() (dentro de lista-tarefas.component.ts no método filtrarTarefasPorDescricao() ) imediatamente retira o espaço, sendo possível filtrar tarefa somente pelo primeiro nome (ignorando caracteres especiais).

  • Causa do problema: campoBusca, passado no ngModel, também foi passado como parâmetro no método filtrarTarefasPorDescricao().

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Desta maneira, this.campoBusca e o parâmetro nomeado descrição já são inicialmente "a mesma coisa". Aplicando o método trim() e atribuindo o valor em this.campoBusca acaba refletindo também no valor digitado no input.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

  • Uma de muitas soluções: Retirar o parâmetro de dentro do método filtrarTarefasPorDescricao() no template

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

e fazer ajustes no método filtrarTarefasPorDescricao() no ts.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

filtrarTarefasPorDescricao(): void {
    const descricao = this.campoBusca.trim().toLowerCase();
    
    if(descricao){
      this.tarefasFiltradas = this.listaTarefas
        .filter(tarefa => tarefa.descricao
            .trim()
            .toLowerCase()
            .includes(descricao));
    } else {
      this.tarefasFiltradas = this.listaTarefas;
    }
}

Esta é a maneira mais rápida que encontrei para contornar o problema, mas tem muitas maneiras de aplicar um filtro, e não é o foco deste curso. Uma indicação de curso para este tipo de abordagem (filtros) é o "RxJS e Angular: programando de forma reativa", também ministrado pela Nayanne aqui na Alura, onde grande parte das aulas é sobre a performance da aplicação. Melhor curso que já fiz.

2 respostas
solução!

Oi Guilherme, tudo bem?

Agradeço imensamente por compartilhar sua solução, isso pode ajudar muitos outros estudantes que possam enfrentar o mesmo problema.

Sua solução faz sentido. Ao remover o parâmetro dentro do método filtrarTarefasPorDescricao() no template e fazer os ajustes no método correspondente no arquivo .ts, você evitou que o método trim() afetasse o valor digitado no input.

Isso é um ótimo exemplo de como a comunidade pode se ajudar e aprender junta. Continue assim!

Um abraço e bons estudos.

Oi Guilherme, tudo bem?

Muito obrigada pela colaboração e pelo seu comentário!

É sempre gratificante e motivador receber feedback positivo como o seu. :)

Desejo a você muito sucesso em sua jornada de aprendizado.

Um grande abraço!