Vinculando Dados - Vue.js
Vue.js permite estabelecer vinculação entre os elementos de uma página da web e os dados de um objeto Vue. Há diversas formas de realizar essa vinculação.
Interpolação
A forma mais básica de vinculação é a interpolação, onde o valor vinculado é envolvido por chaves duplas {{}}
<!DOCTYPE html>
<html>
<head>
<title>Estudando Vue.js</title>
<meta charset="utf-8" />
</head>
<body>
<script src="https://unpkg.com/vue"></script>
<div id="app">
<p>{{ name }} - {{ age }}</p>
</div>
<script>
Vue.createApp({
data() {
return { name: "Tom", age: 36 }
}
}).mount("#app");
</script>
</body>
</html>
Ao renderizar o conteúdo, as expressões dentro das chaves {{ }}
name
age
data
Expressões na Interpolação
A interpolação suporta o uso de expressões JavaScript, o que permite adicionar lógica diretamente ao HTML. No exemplo abaixo, uma condição avalia a idade e exibe um texto de forma condicional:
<!DOCTYPE html>
<html>
<head>
<title>Estudando Vue.js</title>
<meta charset="utf-8" />
</head>
<body>
<script src="https://unpkg.com/vue"></script>
<div id="app">
<p>{{ age > 25 ? 'Mais de 25 anos' : '25 anos ou menos' }}</p>
</div>
<script>
Vue.createApp({
data() {
return { name: "Tom", age: 36 }
}
}).mount("#app");
</script>
</body>
</html>
Nesse caso, a expressão age > 25 ? 'Mais de 25 anos' : '25 anos ou menos'
Métodos no Objeto Vue
Além de variáveis e expressões, é possível interpolar os valores retornados por métodos definidos no objeto Vue. O exemplo a seguir utiliza métodos para retornar mensagens personalizadas:
<!DOCTYPE html>
<html>
<head>
<title>Estudando Vue.js</title>
<meta charset="utf-8" />
</head>
<body>
<script src="https://unpkg.com/vue"></script>
<div id="app">
<p>{{ sayHi() }}</p>
<p>15 horas: {{ welcome(15) }}</p>
<p>22 horas: {{ welcome(22) }}</p>
</div>
<script>
Vue.createApp({
data() {
return { name: "Tom", age: 36 }
},
methods: {
sayHi() {
return `Olá, meu nome é ${this.name}`;
},
welcome(hour) {
if (hour > 18) return 'Boa noite.';
if (hour > 12) return 'Boa tarde.';
return 'Bom dia.';
}
}
}).mount("#app");
</script>
</body>
</html>
O método sayHi
name
welcome
v-text
Para exibir valores simples, o atributo v-text
<!DOCTYPE html>
<html>
<head>
<title>Estudando Vue.js</title>
<meta charset="utf-8" />
</head>
<body>
<script src="https://unpkg.com/vue"></script>
<div id="app">
<div v-text="name"></div>
<div v-text="age"></div>
</div>
<script>
const vueApp = Vue.createApp({
data() {
return { name: "Tom", age: 36 }
}
}).mount('#app');
</script>
</body>
</html>
Neste exemplo, os valores de name
age
<div>
Vinculação a Atributos
Para associar valores a atributos de elementos HTML, a diretiva v-bind
<!DOCTYPE html>
<html>
<head>
<title>Estudando Vue.js</title>
<meta charset="utf-8" />
</head>
<body>
<script src="https://unpkg.com/vue"></script>
<div id="app">
<a v-bind:href="link" v-bind:title="title">{{ text }}</a>
</div>
<script>
Vue.createApp({
data() {
return { text: 'Google', title: 'google.com', link: 'https://google.com' }
}
}).mount('#app');
</script>
</body>
</html>
Após v-bind
link
title
href
title
<a>
É possível utilizar uma forma abreviada de v-bind
::
<a :href="link" :title="title">{{ text }}</a>
Vinculação Única
Por padrão, quando o valor de uma propriedade vinculada é alterado, a interface é atualizada automaticamente para refletir o novo valor. No entanto, para exibir apenas o valor inicial de uma propriedade sem atualizações subsequentes, a diretiva v-once
<!DOCTYPE html>
<html>
<head>
<title>Estudando Vue.js</title>
<meta charset="utf-8" />
</head>
<body>
<script src="https://unpkg.com/vue"></script>
<div id="app">
<p v-once>{{ message }}</p>
</div>
<script>
const vueApp = Vue.createApp({
data() {
return { message: 'Hello' }
}
}).mount('#app');
vueApp.message = "Goodbye";
console.log(vueApp.message); // Goodbye
</script>
</body>
</html>
Mesmo que o valor de message
v-once
Vinculação ao HTML
Para associar um elemento diretamente ao código HTML, a diretiva v-html
<!DOCTYPE html>
<html>
<head>
<title>Estudando Vue.js</title>
<meta charset="utf-8" />
</head>
<body>
<script src="https://unpkg.com/vue"></script>
<div id="app">
<div v-html="message"></div>
<div>{{ message }}</div>
</div>
<script>
const vueApp = Vue.createApp({
data() {
return { message: '<h2>Hello</h2>' }
}
}).mount('#app');
</script>
</body>
</html>
Com a diretiva v-html
v-html
<h2>