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

Imboud Property não atualiza após ser detectado mudança na url do navegador.

Pelas minhas análises, a Imboud property photos, lá do componente photos não está mudando quando eu altero a url, apesar de a variável photos aqui neste componente photo-list mudar, isso não está sendo passando para o componente photos, e então, o ngOnChanges do componente photos não dispara para atualizar a view das fotos. O que será que pode ser isso? Estou usando Angular 10.

componente photo-list

ngOnInit(): void {
    console.log('ngOnInit() do component photo-list');

    this.activatedRoute.params.subscribe(
      (params) => { 
        console.log('params: ', params);
        this.userName = params.userName;
        this.photos = this.activatedRoute.snapshot.data['photos']; 
      }
    );
   }

componente photos

@Input() photos: Photo[] = [];
  rows: any[] = []; // quem vai ser o row, é minha LI

  constructor(private activatedRoute: ActivatedRoute) { }

  ngOnInit(): void {
  }

  ngOnChanges(changes: SimpleChanges) {
   if (changes.photos) {
      console.log('PHOTOS: ', this.photos);
      console.log('PHOTOS: ', changes.photos);
      this.rows = this.groupColumns(this.photos);
    }
  }

groupColumns(photos: Photo[]): Photo[] {
    const newRows = [];

    for (let index = 0; index < photos.length; index += 3) {

      newRows.push(photos.slice(index, index + 3)); 
    }
    return newRows;
  }
14 respostas

As vezes preciso clicar na tela para o ngOnChanges detectar, as vezes ele tem um delay de 5 a 10 segundos, as vezes não funciona, e as vezes funciona. Não consigo entender kkkk Se puderem me ajudar.

Peguei o projeto da aula e só adicionei this.activatedRoute.params.subscribe, funcionou ao mudar de usuário, digitando diretamente na barra de endereço ou usando o botão voltar. Tente verificar o arquivo de rotas app.routing.module.ts ou o resolver photo-list.resolver.ts, tente também ver se não aparece nenhum erro no console do navegador, veja também a aba Network, quanto tempo está levando as requisições para a API de fotos.

Eu já ví tudo isso. :/ Os valores atualizam, só não chegam no ngOnChanges do componente photos.

E quando chegam, chegam com um delay de 10 segundos ou mais, ou se eu mexer em algo na tela.

O problema é o ngOnChanges do componente photos que não dispara, porque por algum motivo o valor photos: Photo[] = [] do componente photo-list, ele muda certinho quando mudo a url ou clico em voltar, mas ele deveria atualizar a Inboud Property do componente photos quando passo essa variável no template assim:

<ap-photos [photos]="photos">

Não está chegando lá nesse componente. Esse é o problema.

Então, acabei de testar no navegador Opera e no Edge e funciona certinho. Só no meu chrome que está com a versão mais atualizada Versão 85.0.4183.121 (Versão oficial) 64 bits que está com problema Estranho kkkk Bom, já vimos que é o navegador e não o código. Puxa vida.

Essa vai ficar pra experiência hein kkkkk quem diria, Chrome. E eu quebrando a cabeça.

Acho que você não teve problema porque baixou o projeto da aula, que está com outra versão do Angular.

Meu projeto está com a versão 10 do Angular.

Acho que eu devia reportar isso né, mas não sei como faz.

Vou tentar usar a versão 10, por acaso você está salvando seu projeto no git?

Desculpe o mal entendido, Na verdade estou com a versão 9 do Angular, acabei de ver.

Estou com um repositório mas privado.. Vou fazer um público e subir lá, Daí te mando aqui o repositório. Um momento.

Segue o link do projeto no github: https://github.com/JocimarMallmann/projeto-teste

Pode usar a mesma API do curso

Porém ao subir o servidor, Utilize o NVM para mudar sua versão do Node para 8.17.0 e quando for subir o projeto Angular, use o NVM para mudar sua versão do Node para a 12.14.1

Aqui tem um tutorialzinho legal do NVM https://www.treinaweb.com.br/blog/instalando-e-gerenciando-varias-versoes-do-node-js-com-nvm/

nvm ls, para listar todas as versões Node instaladas na sua máquina

nvm use versao-escolhida-para-usar

Só isso.

Muito obrigado desde já.

Meu primo me apontou o erro. Aconteceu o seguinte..

Eu tinha feito a parte 2 do curso de Angular a um tempo atrás, então eu refiz a parte 2, voltando a ramificação do final do curso 1 para que eu refizesse o curso 2...

Então quando terminei o curso 2, eu fiz um merge.. E aconteceu que a pasta antiga ficou lá e ficou 2 pastas com 1 arquivo, cada uma com o nome diferente, estas pastas eram o:

platform-detector e platAform-detector, e os arquivo tinha esse nome, com a diferença que um tinha o 'a' no 'plataform' e o outro não 'platform'

Então nos componentes signup e signin eu importava o correto que eu tinha feito no momento do curso, que era o platform-detector.service... E na directive lá na pasta shared, a diretiva ImmediateClickDirective estava importando o 'plataform-detector.service, que eu tinha feito a uns meses atrás, essa era a pasta que ficou com o merge'.

E por isso estava bugando só Chrome.

Veja só quanta volta.

Mas obrigado.

Fica pra experiência! kkkkk

Falei cedo de mais. O Chrome me trollou. Se puder me ajudar kkkkkkk

Voltou a bugar no Chrome.

Quando eu fiz a alteração acima descrita funcionou, mas aí reestartei a aplicação e voltou como era antes. Bugando no Chrome.


Angular CLI: 9.0.6
Node: 12.14.1
OS: linux x64

Angular: 9.0.6
... animations, cli, common, compiler, compiler-cli, core, forms
... language-service, platform-browser, platform-browser-dynamic
... router
Ivy Workspace: Yes

Package                           Version
-----------------------------------------------------------
@angular-devkit/architect         0.900.6
@angular-devkit/build-angular     0.900.6
@angular-devkit/build-optimizer   0.900.6
@angular-devkit/build-webpack     0.900.6
@angular-devkit/core              9.0.6
@angular-devkit/schematics        9.0.6
@ngtools/webpack                  9.0.6
@schematics/angular               9.0.6
@schematics/update                0.900.6
rxjs                              6.5.4
typescript                        3.7.5
webpack                           4.41.2

-----------------------------------------------------------

Chrome: 85.0.4183.121
SO: Ubuntu 20.04.1 LTS

Tentei fazer como você falou, com o seu código e usando as versões informadas, ainda assim está funcionando. Talvez eu não tenha entendido exatamente o problema, mas parece estar funcionando normal.

Tentou limpar o cache do navegador? Apagar a pasta do node_modules e instalar tudo novamente?

Não tinha feito isso. Mas fiz agora e tá do mesmo jeito. Limpei o cache do navegador e também do NPM. Também deletei o node_modules e instalei novamente.

Continua o mesmo problema.

Aqui funciona no Opera, Edge certinho. Só no Chrome que não funciona.

Mas obrigado.

Será que pode ser uma extensão de terceiro no Navegador que causou esse bug?

Porque eu tirei uma extensão que compara preços de sites aqui do Chrome e passou a funcionar...

Será que pode ser isso então?

solução!

É exatamente isso. Essa extensão aqui ó, https://bilometro.brksedu.com.br/ Instala no seu navegador pra você ver kkkkkkkk

Vai parar de funcionar. Aí você desativa a extensão, e volta a funcionar, se você ativa a extensão, para de funcionar kkkk

Fica pra experiência!

Uma extensão no navegador por bugar a aplicação

Obrigado.

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