Rotas no Vue com vue-router – parte 2

Como passar um valor dinâmico

Nessa segunda parte do artigo vou mostrar como criar rotas com valores dinâmicos, porque até agora estou criando somente rotas exatas, como o '/' e '/about', mas e se eu quiser pegar um produto pelo id, onde claro esse id será dinâmico ?

É bem simples, veja só.

Quando eu quero chamar a rota '/product/12', você não concorda comigo que o 12 pode ser qualquer valor ?.Então nas rotas eu preciso colocar esse valor como dinâmico, ou seja, trabalhar com um placeholder.

Olha como fica a rota ‘/product/12' com um placeholder no 12.

const router = createRouter({
    history: createWebHistory(import.meta.env.BASE_URL),
    routes: [
        {
            path: '/product/:id',
            component: Product
        }
    ]
});

O :id é o placeholder, isso significa que ali posso passar qualquer valor, e o :id pode ser qualquer nome, não precisa ser esse.

Agora posso passar '/product/12', '/product/geladeira'..etc…

Como eu pego o valor dinâmico no componente

Legal, agora você já sabe como passar um valor dinâmico para a rota, mas agora vem o problema, como eu pego esse valor dentro do meu componente, no caso no componente Product?

Dá só uma olhada no código abaixo.

<template>
  <h2>Product</h2> 
</template>

<script setup>
import { useRoute } from 'vue-router';

const route = useRoute();

console.log(route.params.id);
</script>

Primeiro tenho que importar o useRoute, e depois executar ele como uma função e atribuir para a constante route.

Agora com o route eu posso chamar o params(sim, tem que ser sempre params), e depois chamo o id, ficando route.params.id.

Se eu colocasse lá no placeholder '/product/:name', no route eu pegaria esse valor como route.params.name, deu para entender a idéia né ?

Criando link com um objeto

Olha só que legal, eu posso no router-link ao invés de passar como abaixo.

<router-link to="product/12">Product</router-link>,

Eu posso usar o v-bind passando para o to um objeto.

<router-link v-bind:to="{name:'product', params:{id:12}}">About</router-link> |

Aposto que você percebeu que no to passei um objeto, e reparou também que passei para esse objeto a propriedade name:'Product', mas o que significa esse name ?

Quando eu crio a rota eu posso passar para ela um nome.

const router = createRouter({
    history: createWebHistory(import.meta.env.BASE_URL),
    routes: [
        {
            path: '/product/:id',
            name:'Product', // rota com um name, chamado no link
            component: Product
        }
    ]
});

Agora no link eu posso passar no objeto o name, que ele vai chamar justamente a rota com esse name, simples né ?

O params do objeto já é auto-explicativo, e eu pego ele no componente com route.params.nome-propriedade, e eu posso passar quantas propriedades eu quiser.

Passando e pegando uma QueryString

E se você quiser passar uma QueryString pelo link pode passar de duas maneiras, a primeira a mais tradicional.

<router-link to="/product/12?name=alexandre">Product</router-link>

E dentro do componente é só chamar através do route a propriedade query.

<template>
<h2>Product</h2>
</template>

<script setup>
import { useRoute } from 'vue-router';

const route = useRoute();

console.log(route.params, route.query); // route.query
</script>

A outra maneira de passar uma querystring é usar um objeto, assim como fiz com o params.

<router-link :to="{name:'product', params:{id:12}, query:{name:'Alexandre'}}">
   Product
</router-link>

E assim termina essa segunda parte desse artigo onde ensino a trabalhar com as rotas no Vue 3.


Se quiser conhecer meu trabalho mais a fundo, visite meu canal no YouTube e veja meus cursos completos clicando nos links abaixo.

🔥Canal no YouTube: Ir para o canal no YouTube
🔥Veja meus cursos disponíveis: Ir para a lista de cursos

About the Author

Alexandre Eduardo Cardoso
Alexandre Eduardo Cardoso

Meu nome é Alexandre Cardoso e tenho 41 anos. Sou programador desde 2008, quando comecei a estudar e me especializar em PHP e Javascript. Já em 2011, dei minhas primeiras aulas de programação, e não consegui mais parar desde então. Ensinar é minha missão neste mundo!

0 Comments

Leave a comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *