Vue Js
Vue Js
js
Conteudista
Prof. Me. Marco Antonio Sanches Anastacio
Revisão Textual
Esp. Pérola Damasceno
OBJETIVOS DA UNIDADE
• Entender o que é o Vue.js e como utilizá-lo na construção de páginas web
interativas;
Este arquivo PDF contém o mesmo conteúdo visto on-line. Sua dis-
ponibilização é para consulta off-line e possibilidade de impressão.
No entanto, recomendamos que acesse o conteúdo on-line para
melhor aproveitamento.
2
Afinal, o que é Vue.js?
A popularidade do JavaScript entre os desenvolvedores web fez com que surgis-
sem, ao longo do tempo, uma enorme variedade de frameworks front-end, desti-
nados aos mais variados propósitos, como os mais utilizados no mercado atual-
mente: React, Angular e Vue.js.
Leitura
O que são aplicações SPA?
Leitura
Visite a página do StackOverFlow e conheça
mais detalhes dessa pesquisa.
3
De modo geral, o Vue.js é uma excelente escolha para projetos web que precisam
de um framework reativo, modular, leve e fácil de aprender. Dentre as principais
vantagens de sua utilização, podemos destacar as seguintes:
• Performance: por ser leve e rápido, ele tem bom desempenho para apli-
cações de pequeno ou grande porte;
Primeiros Passos
Para começar a utilizar o Vue.js você precisa adicioná-lo ao seu projeto. Existem
quatro formas principais para fazer isso, dependendo de suas necessidades:
Leitura
O que é npm?
4
Leitura
O que é CDN?
5
Hello World, Vue.js
Nossa primeira aplicação prática no mundo do Vue.js será um Hello World, cujo
código é apresentado no exemplo a seguir:
1. <!DOCTYPE html>
2. <html>
3. <head>
4. <title>Meu primeiro app Vue</title>
5. <script src=”https://unpkg.com/vue@3”></script>
6. </head>
7. <body>
8. <div id=”app”>
9. {{ message }}
10. </div>
11. <script>
12. const app = Vue.createApp({
13. data() {
14. return {
15. message: ‘Hello World, Vue.js!’
16. }}
17. })
18. app.mount(‘#app’)
19. </script>
20. </body>
21. </html>
Neste exemplo, criamos uma instância Vue simples que renderiza a mensagem
“Hello World, Vue.js!” em um elemento HTML. Não se preocupe se o código pare-
ceu um pouco confuso para você, vamos comentar cada parte no Quadro 1:
6
Quadro 1 – Exemplo comentado
Linha(s) Descrição
Em nosso exemplo, o elemento HTML que será utilizado como destino é uma div
cujo id é app. A interpolação de dados irá renderizar a mensagem nesse elemen-
to e, para isso, utilizamos chaves duplas {{}} que contêm a propriedade que se
deseja exibir, neste caso mensagem.
Conhecendo o Vue.js
A arquitetura do Vue.js nos permite construir aplicações que renderize dados
no DOM (Document Object Model) utilizando-se uma sintaxe de template bastante
simples. O DOM é uma representação dos estilos, elementos e conteúdo de uma
página HTML, que mudam na medida em que há uma interação do usuário, o
que exige uma atualização constante do conteúdo pelo navegador.
7
Além disso, como vimos no exemplo anterior, a interpolação é uma forma sim-
ples, porém, poderosa de exibir dados dinamicamente. Veremos, a seguir, como
esses conceitos se integram à construção de páginas web.
<script>
const app = Vue.createApp({
/* opções */
})
app.mount(“#app”)
</script>
Toda instância Vue possui um ciclo de vida que passa por uma série de etapas
desde sua criação até sua destruição. Desta forma, existem propriedades opcio-
nais que caracterizam os diferentes estados de vida de uma instância Vue, que são:
8
• beforeCreate: a instância ainda não foi criada e, portanto, as proprieda-
des de dados e métodos ainda não estão disponíveis;
• created: a instância foi criada, porém, ainda não está pronta para ser
montada. As propriedades de dados e métodos já estão disponíveis;
• mounted: a instância foi montada no DOM e está pronta para ser utili-
zada;
9
<html>
<head>
<title>Ciclo de vida Vue</title>
<script src=”https://unpkg.com/vue@3”></script>
</head>
<body>
<div id=”app”>
<p>{{ message }}</p>
<input v-model=”message” />
</div>
<script>
const app = Vue.createApp({
data() {
return {
message: ‘Olá mundo Vue.js!’
}
},
created() {
console.log(‘Instância criada’)
},
mounted() {
console.log(‘Instância montada’)
},
updated() {
console.log(‘Instância atualizada’)
},
unmounted() {
console.log(‘Instância desmontada’)
}
})
app.mount(‘#app’)
</script>
10
</body>
</html></body>
</html>
Leitura
O que são as ferramentas de desenvolvimen-
to do navegador?
Diretivas do Vue.js
Sinteticamente, podemos definir as diretivas como sendo atributos adicionados
a um elemento HTML que estendem seu comportamento e funcionalidade. Na
prática, teremos um comportamento que reage a interações do usuário, atuali-
zando a interface dinamicamente.
No Vue.js as diretivas são precedidas pelo prefixo “v-”, são aplicadas aos elemen-
tos HTML e possuem comportamentos distintos, que são configuráveis por meio
de opções, como veremos mais adiante. As principais diretivas Vue.js são:
11
• v-model: é utilizada no conceito “two-way-databind”, ou seja, permite
criar um vínculo bidirecional de dados entre um elemento HTML (como
o input, por exemplo) e um componente Vue.js. A diretiva v-model per-
mite atualização automática do componente à medida que um campo
de formulário recebe informações. O two-way-databind é um dos con-
ceitos mais relevantes para o desenvolvimento de aplicações web inte-
rativas e é uma das principais vantagens do Vue.js em relação a outros
frameworks.
1. <!DOCTYPE html>
2. <html>
3. <head>
4. <title>Two-way-data-bind Vue.js</title>
5. <script src=”https://unpkg.com/vue@3”></script>
6. </head>
7. <body>
8. <div id=”app”>
9. <label for=”nome”>Nome:</label>
10. <input type=”text” v-model=”nome”>
11. <p>Olá {{ nome }}! Bem-vindo ao Vue</p>
12. </div>
13. <script>
14. const app = Vue.createApp({
15. data() {
16. return {
17. nome: ‘’
18. }
19. }
20. })
21. app.mount(‘#app’)
22. </script>
23. </body>
24. </html>
12
Na prática
Compare este exemplo com os anteriores e observe a função
do v-model que adicionamos ao elemento input na linha 10.
Na prática
Neste exemplo, adicionamos ao modelo de dados uma pro-
priedade chamada imagemUrl, que atribuímos o valor https://
bit.ly/3RijRf9
<div v-if=”mostrarImagem”>
<img v-bind:src=”imagemUrl” alt=”Imagem”>
</div>
13
<div id=”app”>
<h1>{{ titulo }}</h1>
<p v-if=”mostrarImagem”>
<img v-bind:src=”imagemUrl” alt=”Imagem”>
</p>
<p>Clique no botão para ocultar / exibir a imagem</p>
<button v-on:click=”alternarImagem”>Clique-me</button>
</div>
<script>
const app = Vue.createApp({
data() {
return {
titulo: ‘Página web dinâmica’,
imagemUrl: ‘https://files.readme.io/86176b7-vuejs.png’,
mostrarImagem: true
}
},
methods: {
alternarImagem() {
this.mostrarImagem = !this.mostrarImagem;
}
}
})
app.mount(‘#app’)
</script>
14
No exemplo, methods refere-se à propriedade do Vue.js, que contém todos os
métodos que podem ser chamados em resposta a eventos, ou para executar al-
guma tarefa especificamente criada pelo desenvolvedor da aplicação.
<div id=”app”>
<ul>
<li v-for=”(nome, index) in nomes”>
{{ index }} - {{ nome }}
</li>
</ul>
</div>
A diretiva v-for itera sobre o array de nomes para gerar uma lista na qual para
cada nome é gerado um elemento li. O array de nomes foi criado dentro do ob-
jeto data:
<script>
const app = Vue.createApp({
data() {
return {
nomes: [‘Marco’, ‘Mariana’, ‘Ana’, ‘Alexandre’, ‘Suzana’]
}}
})
app.mount(‘#app’)
</script>
15
• v-show: é utilizada de forma semelhante ao v-if para controlar a exibi-
ção condicional de elementos com base em uma expressão. Vejamos um
exemplo completo:
<html>
<head>
<script src=”https://unpkg.com/vue@3”></script>
</head>
<body>
<div id=”app”>
<p v-show=”mostrarMsg”> {{ message }} </p>
<button v-on:click=”mostrarMsg = !mostrarMsg”>
Alterar exibição</button>
</div>
<script>
const app = Vue.createApp({
data() {
return {
message: “Esta mensagem será ocultada / exibida”,
mostrarMsg: true
}}
})
app.mount(‘#app’)
</script>
</body>
</html>
16
A despeito do resultado na prática ser o mesmo, a principal diferença entre o v-if
e o v-show está na forma como cada um altera a visibilidade de um elemento
utilizando o CSS. Enquanto o v-if insere ou remove elementos no DOM, o v-show
somente altera a propriedade display para none, ou seja, o elemento ainda exis-
te no DOM, somente sua visibilidade foi alterada.
Na prática
Em seu navegador favorito, abra “Ferramentas do desenvolve-
dor” e, na inspeção de “Elementos”, compare o resultado do uso
do v-if e do v-show.
Utilizando Componentes
Os componentes do Vue constituem um dos principais recursos do framework
e permitem criar elementos HTML personalizados, independentes e frequente-
mente reutilizáveis, para construção de interfaces de usuário.
17
1.<html>
2. <head>
3. <script src=”https://unpkg.com/vue@3”></script>
4. </head>
5. <body>
6. <div id=”app”>
7. <h1>{{ titulo }}</h1>
8. <carros-list
9. v-for=”carro in carros”
10. v-bind:carro = “carro”
11. ></carros-list>
12. </div>
13.<script>
14. const app = Vue.createApp({
15. data() {
16. return {
17. titulo: “Utilizando componentes”,
18. carros: [“Fusca”, “Kombi”, “Brasília”, “Uno”, “Opala”]
19. }}
20. })
21. app.component(“carros-list”, {
22. props: [“carro”],
23. template: “<li> {{ carro }} </li>”
24. })
25. app.mount(“#app”)
26.</script>
27.</body>
28.</html>
18
Site
Navegue na documentação oficial do Vue.js e co-
nheça um pouco mais sobre os componentes.
<html>
<head>
<script src=”https://unpkg.com/vue@3”></script>
</head>
<body>
<div id=”app”>
<h1>Reutilizando componentes</h1>
<button-counter></button-counter>
<button-counter></button-counter>
<button-counter></button-counter>
</div>
<script>
const app = Vue.createApp({})
app.component(“button-counter”, {
data(){
return {
count: 0
}},
template:`<button v-on:click=”count++”>
Você clicou {{ count }} vezes.
</button>`
})
19
app.mount(‘#app’)
</script>
</body>
</html>
A ideia desse exemplo foi criar um componente do tipo button cujo evento click
adiciona uma unidade a um contador (count). Perceba que implementamos o
componente button-counter uma única vez, mas, reutilizamos o template criado
três vezes, sem a necessidade de replicar o código utilizado.
Em Síntese
Como vimos nesta Unidade, o Vue.js é uma biblioteca JavaScript
moderna e progressiva para a construção de interfaces de usu-
ário interativas e reativas, que, por sua simplicidade, eficiência
e flexibilidade, permite aos desenvolvedores criarem aplicativos
web complexos de forma mais ágil. Os componentes facilitam a
organização e manutenção do código e as diretivas simplificam
a manipulação dinâmica do DOM, conferindo ao Vue.js uma
performance eficiente, com uma renderização rápida e otimiza-
da, que garante ótima experiência do usuário.
20
MATERIAL COMPLEMENTAR
Sites
Codesandbox
É uma plataforma em nuvem que permite e o desenvolvimento e
compartilhamento on-line de soluções web, de forma rápida e eficiente.
https://bit.ly/3RhidKJ
learnvue.co
É uma plataforma com conteúdos para aprendizagem do Vue.js.
https://bit.ly/44HrEpS
Vue.js Brasil
Conheça a página da comunidade brasileira dedicada ao Vue.js, explore
e enriqueça seus conhecimentos com diversos artigos em Português.
https://bit.ly/3resgFF
REFERÊNCIAS BIBLIOGRÁFICAS
CLARK, R. et al. Introdução ao HTML5 e CSS3: a evolução da web. Rio de Janeiro: Alta
Books, 2014.
SILVA, M. S. CSS3: Desenvolva aplicações web profissionais com uso dos poderosos
recursos de estilização das CSS3. São Paulo: Novatec, 2012.