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

SPA rotas com JS puro

Gente, consegui fazer uma SPA simples de uma forma diferente da mostrada no curso. Com a ressalva do ultimo trecho de código. Sem o código ao final window.init = init nada funciona, alguém saberia me explicar para que eu uso ele, uma vez que eu já coloquei um evento de load no arquivo deveria funcionar sem maiores problemas ?


import {Home} from "./src/componentes/CompHome/compHome.js";
import {About} from "./src/componentes/CompAbout/compAbout.js";
import {Projetos} from "./src/componentes/CompProjetos/compProjetos.js";


const div = document.querySelector('[data-container]');

const rotas = {
    '/':Home,
    '/about':About,
    '/projetos':Projetos
}

function init(pathname){
    div.innerHTML="";    
    window.history.pushState({},window.location, window.location.origin + pathname)
    div.appendChild(rotas[window.location.pathname]()); 


}

window.addEventListener('load',()=>{    
    div.appendChild(rotas[window.location.pathname]());
})

window.onpopstate = ()=>{
    div.innerHTML="";        
    div.appendChild(rotas[window.location.pathname]()); 
}


window.init=init;
5 respostas
solução!

Fala ai Raul, tudo bem? Em algum lugar do seu projeto você deve estar fazendo window.init() ou apenas init().

Por isso essa função é anexada na window, para que ela fique disponível globalmente.

Espero ter ajudado.

Ahhh saquei. Eu uso ela no HTML, mas o estranho é que não usei o Export nela, apenas nas outras funções, algumas eu chamo dentro de init()... Se eu chamo funções modulares dentro de uma função que eu não usei Export, essa função se torna também um módulo? Js é muito doido rsrs ou eu entendi tudo errado.

Fala Raul, vamos lá:

Eu uso ela no HTML, mas o estranho é que não usei o Export nela, apenas nas outras funções

Mas você jogou ela para dentro da window, então ela vai ficar acessível globalmente.

Se eu chamo funções modulares dentro de uma função que eu não usei Export, essa função se torna também um módulo?

Não, se você não exportou ela, ela não será um módulo. No seu caso a função init não é um módulo, mas, como ela foi atribuída para a window, ela vai ficar disponível de forma global.

Espero ter ajudado.

Achei que toda função não modular já estaria no escopo global. Dessa forma não teria a necessidade de atribuir à window. Peculiar.

Boa Raul, JavaScript tem suas particularidades.

Abraços e bons estudos.