Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

O método unsubscribe() desaloca a memória imediatamente ao ser chamado?

Quando mudarmos de rota o metodo ngOnDestroy() do ciclo de vida do Angular será chamado imediatamente ? E quando isso ocorrer o unsubcribe será executado em seguida ou o framework decidirá em que momento isso dever ser feito para desalocar memória? Eu fiz um console.log e mudei de rota para "http://localhost:4200/user/almeida" mas não vi o método ngOnDestroy ser chamado!


  ngOnDestroy(): void {
    console.log(">>>>>>>>>>>>>> PhotoListComponent ngOnDestroy() >>>")
     this.debounce.unsubscribe();
 }
7 respostas

Fala ai Marcos, tudo bem? Vamos lá:

Quando mudarmos de rota o metodo ngOnDestroy() do ciclo de vida do Angular será chamado imediatamente ?

Depende, se a mudança de rota ocasionar a necessidade de remover o componente atual e montar outro, sim.

E quando isso ocorrer o unsubcribe será executado em seguida ou o framework decidirá em que momento isso dever ser feito para desalocar memória?

Ele irá executar o unsubscribe, mas, o desalocamento da memória será feito mais tarde pelo JavaScript, da uma olhada:

https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Memory_Management

Espero ter ajudado.

Matheus Castiglioni , muito obrigado em responder! Acontece que ficou ainda uma dúvida. eu pus um console.log no método ngOnDestroy() e eu estava na rota 'user/:userName' onde o componente era PhotoListComponent e em seguida mudei para a rota 'p/add' o que implicaria na criação do componente PhotoFormComponent , mas não vi o metódo ngOnDestroy() ser chamado. A aplicação rodou normalmente mas o metódo ngOnDestroy na executou. Talvez. eu não tenha entendido...mas a minha idéia se eu mudasse para uma rota onde o componente a ser criado era diferente como no caso PhotoFormComponent o método ngOnDestroy deveria ser executado ou nem sempre isso irá ocorrer?

Fala Marcos, estranho, era para o OnDestroy do componente PhotoList ter sido chamado sim, bem estranho.

Eu precisaria do projeto para dar uma olhada com mais calma e detalhes por aqui, se quiser compartilha ele comigo. Pode compartilhar através do Github ou Google Drive (zipado).

Espero ter ajudado.

Tudo bem, Matheus Castiglioni ! Estou disponibilizando o projeto conforme você sugeriu para testar o por que do metodo ngOnDestroy() na classe PhotoListComponent não estar sendo executado quando mudo para uma outra rota. Segue o link para o repositorio no github. https://github.com/Marquedante/AluraPicRepository

https://github.com/Marquedante/AluraPicRepository.git

solução

Fala ai Marcos, tudo bem? Fiz o teste no seu projeto, ao realizar a navegação para o /p/add o ngOnDestroy é chamado e logado normalmente.

Como você está fazendo essa navegação? Se não for pela aplicação (voltar do browser ou digitando URL) o mesmo não vai legar.

Desculpa a demora, estava bem corrido as coisas por aqui.

Espero ter ajudado.

Tudo bem, Matheus Castiglione! Era isso mesmo... depois que crie um botão com louterLink passando a rota que leva a um outro componente passei a ver o metodo ngOnDestroy ser executado. Eu ,realmente, estava usando a url o que é um equivoco neste caso. Mais um vez muito obrigado!

Show de bola Marcos, fico feliz que resolvemos a dúvida.

Sempre que precisar não deixe de criar suas dúvidas.

Abraços e bons estudos.