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

Bug em lazy loading

ERROR Error: Uncaught (in promise): Error: RouterModule.forRoot() called twice. Lazy loaded modules should use RouterModule.forChild() instead.
Error: RouterModule.forRoot() called twice. Lazy loaded modules should use RouterModule.forChild() instead.

Estou com esse Bug em um projeto que estou criando, mas forRoot é chamado só uma vez, já atualizei Angular cli mas sempre fico só nesses erros, a diferença do código usado durante o curso para ensinar lazy loading para o que eu fiz é que eu coloquei o home em outro módulo para não ser carregado junto com as páginas em lazy loading por que vou precisar dele carregado para outras páginas que não será lazy, to desde ontem a horas tentando resolver e não acho nada conclusivo.

9 respostas

Nenhuma resposta para ajudar? tem 4 dias que to preso nisso.

Fala aí Tayran, beleza? Provavelmente o erro é porque dentro dos seus módulos a serem carregadas de forma preguiçosa (lazy loading) você esteja definindo as rotas com RouterModule.forRoot, quando na verdade, dentro dos módulos filhos deve-se usar o RouterModule.forChild.

Troque:

Router.forRoot(SUA_ROTAS)

Por:

Router.forChild(SUA_ROTAS)

Espero ter ajudado.

Como eu disse forRoot é chamado só uma vez, veja na imagem :

https://imgur.com/a/DXtecxE

Por mais que no app.routing.module você esteja chamando apenas uma vez, dentro do home.routing.module você deve estar chamando o .root novamente.

O projeto inteiro só pode chamar o .root uma vez, independe do componente, no caso, geralmente dentro do módulo principal fica o .root e nos demais módulos você usa .child.

Espero ter ajudado.

Você não viu que eu tava usando a função de procurar todos os locais (find all references) onde tem esse método e só existe a definição dele no arquivo de Type Definition do Typescript e o arquivo de rota que está usando ele é o AppRoutingModule, minha outra rota só chama forChild e só existe duas rotas, veja na imagem abaixo o print dos dois, com o forChild e o forRoot, eu estou dizendo que é bug não é atoa, o erro é muito indicativo e eu já tinha buscado se tinha outra chamada de forRoot.

forRoot : https://i.imgur.com/cW0xhwY.png

forChild : https://i.imgur.com/vnBFhMY.png

O projeto está no Github? Se sim me passa o repositório, se não, compacta ele e sobe no Google Drive e compartilha o link aqui.

Fico no aguardo.

solução!

Só voltando para deixar um feedback, como eu disse era algum bug mesmo, criei um projeto com a mesma estrutura e usando os mesmos arquivos e o lazy loading funcionou.

Boa Tayran, as vezes o Angular se perde de acordo com as alterações que foram feitas, muitas vezes precisamos parar o servidor e subir novamente.

Fico feliz por ter conseguido resolver o problema \o/

Abraços

E você acha que não tentei? fiquei mais de uma semana batendo a cabeça no mesmo projeto até reinstalando ele novamente, nada adiantou, era bug mesmo. Obrigado.