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

pushState e

Ainda não entendi muito como funciona a questão do Pathname e como ele captura o "/" ou o "/cadastro"

quando eu chamo a funcao:

navegacao(window.location.pathname)

Como é que se captura o que está em rotas? Só de chamar a função ele já captura?

import {inicializaCadastro} from "../src/componentes/cadastro/componente-cadastro.js";
import inicializaTabela from "./componentes/listagem/listagem-cliente.js";
const rotas = {
    "/":inicializaTabela,
    "/cadastro": inicializaCadastro,
}

const rootDiv = document.querySelector("[data-container]");

const navegacao = pathname =>{
    window.history.pushState({},pathname,window.location.origin+pathname);
    rootDiv.innerHTML = "";
    const iniciarRota = rotas[window.location.pathname]
    rootDiv.appendChild(iniciarRota)
}


export{navegacao}
6 respostas

Fala ai Raul, tudo bem? O window.location.pathname vai retornar o endpoint que a página se localiza.

Ou seja, o que estiver depois do host:porta para frente é o pathname.

http://localhost:1010/ => pathname = /
http://localhost:1010/asd => pathname = /asd
http://localhost:1010/123/321 => pathname = /123/321

A rota atual ele pega nesse trecho:

rotas[window.location.pathname]

Ou seja, está sendo buscado uma propriedade no objeto de forma dinâmica (dado o conteúdo na variável).

Espero ter ajudado.

O que ainda não compreendo é, como aparentemente ele sempre esta no mesmo html que seria o clientes.html. Como é que ele entende que ao clicar no botão X, mesmo permanecendo na mesma página, ele entende que a rota mudou para /cadastro?

No caso ali eu passei a função como valor para '/cadastro', chamar a função já basta para ele entender que a rota mudou ou tem algo mais envolvido?

Deixa, agora que entendi. Perdoe a ignorância. Tive que analisar 10 vezes para ver que eu passo a função com o parametro nos botoes kkkkkk

    <button type="button" class="btn btn-info" onclick="navegacao('/edita?id=${id}'); return false;">Editar</button>

AI ao colocar a chave /edita ele chama a função referente a essa rota la no rootDiv.

Mas ai surge outra duvida, onde o '/' vai carregar, já que não chamei a navegacao('/')? Seria no window.navegacao=navegacao?

Fala Raul, vamos lá:

O que ainda não compreendo é, como aparentemente ele sempre esta no mesmo html que seria o clientes.html. Como é que ele entende que ao clicar no botão X, mesmo permanecendo na mesma página, ele entende que a rota mudou para /cadastro?

O navegador sabe que a página mudou graças ao pushState, ele vai alterar o history da página setando uma nova rota na pilha de navegação.

No caso ali eu passei a função como valor para '/cadastro', chamar a função já basta para ele entender que a rota mudou ou tem algo mais envolvido?

A função é importante para renderizar o novo conteúdo da nova página, além do que foi explicado anteriormente.

AI ao colocar a chave /edita ele chama a função referente a essa rota la no rootDiv.

Exatamente

Mas ai surge outra duvida, onde o '/' vai carregar, já que não chamei a navegacao('/')? Seria no window.navegacao=navegacao?

O / vai carregar assim que a página foi carregada, nesse momento, assim que a página carregar o JS vai passar pelo seu gerenciamento de rotas.

Espero ter ajudado.

Então pelo que entendi, nesse código, o pushState basicamente se guia pelos eventos que acontecem no navegador certo?

Exemplo, ao carregar a página pela primeira vez "onload" a função que carrega renderiza a tabela. Ou seja, a cada evento, o push state meio que verifica se está associado a uma rota e renderiza na tela. Ou estou muito errado? rsrs Só para concluir o raciocínio. Tenho tido muita informação rsrs as vezes o cérebro não aguenta processar tudo.

solução!

Fala Raul, é isso ai mesmo (de forma resumida e simplista).

Abraços e bons estudos.