Desenvolvimento Web II

Notas de aula do prof. Eduardo da disciplina de Desenvolvimento Web II (curso técnico)

View on GitHub

Adicionar o Vue-router

Nesta etapa, vamos adicionar o Vue-router ao projeto. Para isso, vamos executar o seguinte comando no terminal:

npm install vue-router

Em seguida, vamos criar o arquivo src/router/index.js com o seguinte conteúdo:

import { createRouter, createWebHistory } from 'vue-router';

const routes = [
  {
    path: '/',
    name: 'Home',
    component: () => import('../views/Home.vue'),
  },
  {
    path: '/filmes',
    name: 'Movies',
    component: () => import('../views/MoviesView.vue'),
  },
  {
    path: '/tv',
    name: 'TV',
    component: () => import('../views/TvView.vue'),
  },
];

const router = createRouter({
  history: createWebHistory(),
  routes,
});

export default router;

No exemplo acima, estamos criando um roteador com três rotas:

No arquivo src/main.js, vamos importar o Vue-router e adicionar o router ao projeto. Para substitua o conteúdo do arquivo pelo seguinte:

import { createApp } from 'vue';
import App from './App.vue';
import router from './router';

const app = createApp(App);
app.use(router);

app.mount('#app');

Nesse caso, estamos adicionando o suporte ao Vue-router ao projeto e, em seguida, montando o aplicativo.

Criando a página Home

Nesta etapa, vamos criar a página Home. Para isso, vamos criar o arquivo src/views/Home.vue com o seguinte conteúdo:

<template>
  <div>
    <h1>Home</h1>
  </div>
</template>

Nesse caso é apenas uma página com o título “Home”, que será aprimorara ao longo do tutorial.

Separando a listagem de gêneros em duas views

Nesta etapa, vamos separar a listagem de gêneros em duas views: uma para filmes e outra para programas de TV.

Criando a página para gêneros de filmes

Para criar a página para gêneros de filmes, vamos criar o arquivo src/views/MoviesView.vue com o seguinte conteúdo:

<script setup>
  import { ref, onMounted } from 'vue';
  import api from '@/plugins/axios';

  const genres = ref([]);

  onMounted(async () => {
    const response = await api.get('genre/movie/list?language=pt-BR');
    genres.value = response.data.genres;
  });
</script>
<template>
  <div>
    <h1>Gêneros de filmes</h1>
    <ul>
      <li v-for="genre in genres" :key="genre.id">
        {{ genre.name }}
      </li>
    </ul>
  </div>
</template>

Note que estamos utilizando o axios como um plugin, conforme apresentado em aulas anteriores. Também aproveitamos a mesma parte de código que já tinha sido anteriormente desenvolvida.

Criando a página para gêneros de programas de TV

Para criar a página para gêneros de programas de TV, vamos criar o arquivo src/views/TvView.vue com o seguinte conteúdo:

<script setup>
  import { ref, onMounted } from 'vue';
  import api from '@/plugins/axios';

  const genres = ref([]);

  onMounted(async () => {
    const response = await api.get('genre/tv/list?language=pt-BR');
    genres.value = response.data.genres;
  });
</script>

<template>
  <div>
    <h1>Gêneros de programas de TV</h1>
    <ul>
      <li v-for="genre in genres" :key="genre.id">
        {{ genre.name }}
      </li>
    </ul>
  </div>
</template>

Note que o exemplo é muito semelhante ao anterior, com a diferença de que estamos buscando os gêneros de programas de TV.

Adicionando o menu de navegação

Nesta etapa, vamos adicionar o menu de navegação. Para isso, vamos alterar o arquivo src/App.vue para o seguinte conteúdo:

<script setup></script>

<template>
  <div>
    <nav>
      <router-link to="/">Home</router-link>
      <router-link to="/filmes">Filmes</router-link>
      <router-link to="/tv">Programas de TV</router-link>
    </nav>
    <router-view />
  </div>
</template>

<style scoped>
  nav {
    display: flex;
    justify-content: flex-start;
    margin-bottom: 1rem;
    column-gap: 2rem;
  }
</style>

Note que estamos utilizando o componente RouterLink para criar os links de navegação. Também estamos utilizando o componente RouterView para indicar onde o conteúdo da página será exibido. Ainda, fizemos uma pequena estilização para o menu de navegação, para que os links fiquem alinhados à esquerda e com um espaçamento entre eles. Note que usamos o atributo scoped para que o estilo seja aplicado apenas ao componente atual.

< TMBD no Vue Ajustes de estilos CSS >