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

View não é atualizada ao efetuar uma nova busca

Saudações pessoal!

Estou desenvolvendo um sistema web em Angular, no qual possui uma barra de pesquisa no header. Visto isso, quando o botão de busca é clicado chama a seguinte função:

  onSearch(){ 
    this.router.navigate(['detalhesPedido',  this.pedido]);
  }

No meu componente "detalhesPedido", possuo o seguinte código:

export class DetalhesPedidoComponent implements OnInit {

  constructor(private activatedRoute: ActivatedRoute) { }

  pedidos: Order[];
  public paginaAtual = 1;

  ngOnInit(): void {
    this.pedidos = this.activatedRoute.snapshot.data.pedido;
  }

}

Quando a view é iniciada é utilizado o resolver abaixo para fazer a requisição http e retornar os detalhes do pedido buscado:

export class SearchOrderResolver implements Resolve<Observable<Order[]>>{

    constructor(private service: SearchOrderService){}

    pedido: string;
    pedidoPesquisa = {
        pedido:""
      };

    resolve(route: ActivatedRouteSnapshot, state:RouterStateSnapshot){
        this.pedidoPesquisa.pedido = route.params.pedido;
        this.pedidoPesquisa.pedido = this.pedidoPesquisa.pedido.replace(/\s/g, '');
        return this.service.searchOrderById(this.pedidoPesquisa);
    }

}

Até ai tudo está funcionando normalmente. Porém quando efetuo uma nova pesquisa, os valores do pedido não são atualizados na views apenas na URL.

Exemplo, quando eu busco o pedido 1234 a view "detalhesPedido" é exibida com sucesso, mostrando todas a informações do pedido. Contudo, caso eu busque o pedido 1235 o valor da URL é alterado para o novo pedido mas a view continua com os valores do pedido anterior.

5 respostas

Fala ai Renan, tudo bem? Falando assim sem ver o problema é bem complicado de ajudar, sendo assim, posso te pedir um favor? Compartilhar o projeto completo comigo, assim eu consigo simular o problema por aqui e analisá-lo com mais calma.

Pode compartilhar através do Github ou Google Drive (zipado).

Espero ter ajudado.

Opa, eae Matheus! Tudo certo, e por ai?

Cara, infelizmente não posso compartilhar o projeto por ser muito grande e pertencer a empresa na qual trabalho.

Contudo, caso ajude, segue alguns prints do que ocorre.

Repare na URL que houve a navegação para o novo pedido pesquisado, contudo os dados exibidos são do pedido pesquisado anteriormente.

Outro detalhe que talvez ajude a entender o comportamento é que caso eu atualize a pagina, os dados exibidos são atualizados.

Fala Renan, realmente sem ter o código e simular o problema fica bem complicado eu tentar ajudar.

O conselho que posso dar é que provavelmente faltou chamar a função update para atualizar a view após a busca ou por algum motivo a chamada declarada não está sendo realizada.

Tente ir adicionando console.log no fluxo e ir acompanhando onde passou ou não passou durante a execução do JavaScript.

Espero ter ajudado.

solução!

Consegui resolver meu problema!

No componente "detalhesPedido" eu removi o método ngOnInit() e coloquei a requisição http no construtor, efetuando o request sempre que o "Router" detecta alguma mudança na URL, dessa maneira:

import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { Order } from '../../shared/search-order/order';

@Component({
  selector: 'app-detalhes-pedido',
  templateUrl: './detalhes-pedido.component.html',
  styleUrls: ['./detalhes-pedido.component.css']
})
export class DetalhesPedidoComponent {

  constructor(private activatedRoute: ActivatedRoute, private router: Router) { 
    router.events.subscribe(x => {
      this.pedidos = this.activatedRoute.snapshot.data.pedido;
    });
  }

  pedidos: Order[];
  public paginaAtual = 1;

}

Boa Renan, sempre que precisar não deixe de criar suas dúvidas.

Abraços e bons estudos.