Vinculação de Dados Bidirecional. Diretiva v-model - Vue.js
Anteriormente, explorou-se o uso de vínculo unidirecional em Vue.js através de interpolação. No entanto, o Vue também oferece suporte a vínculo bidirecional, que é implementado utilizando a diretiva v-model
<input>
<select>
<textarea>
Aqui está um exemplo básico:
<!DOCTYPE html>
<html>
<head>
<title>Aprendendo Vue.js</title>
<meta charset="utf-8" />
</head>
<body>
<script src="https://unpkg.com/vue"></script>
<div id="app">
<p>Insira seu nome:
<input type="text" v-model="userName" placeholder="Digite seu nome" />
</p>
<p>Seu nome: {{ userName }}</p>
</div>
<script>
const vueApp = Vue.createApp({
data() {
return { userName: 'Tom' };
}
}).mount('#app');
</script>
</body>
</html>
Neste exemplo, há um campo de texto que está vinculado ao atributo userName
v-model
userName
Vamos considerar outro exemplo que calcula a área de um retângulo:
<!DOCTYPE html>
<html>
<head>
<title>Aprendendo Vue.js</title>
<meta charset="utf-8" />
</head>
<body>
<script src="https://unpkg.com/vue"></script>
<div id="app">
<p>Largura: <input type="number" v-model="width" placeholder="Digite a largura" /></p>
<p>Altura: <input type="number" v-model="height" placeholder="Digite a altura" /></p>
<p>Área do retângulo: {{ width * height }}</p>
</div>
<script>
const vueApp = Vue.createApp({
data() {
return { width: 20, height: 10 };
}
}).mount('#app');
</script>
</body>
</html>
Neste caso, há dois campos de entrada: um vinculado ao atributo width
height
A diretiva v-model
value
checked
selected
<!DOCTYPE html>
<html>
<head>
<title>Exemplo com v-model</title>
<meta charset="utf-8" />
</head>
<body>
<script src="https://unpkg.com/vue"></script>
<div id="app">
<!-- O atributo checked será ignorado -->
<input type="checkbox" checked v-model="isChecked" />
<p>Checkbox está: {{ isChecked ? 'Marcado' : 'Desmarcado' }}</p>
</div>
<script>
const vueApp = Vue.createApp({
data() {
return { isChecked: false }; // O estado inicial é configurado aqui
},
}).mount('#app');
</script>
</body>
</html>
Neste exemplo:
Apesar de o atributo
estar presente no HTML, ele será ignorado porque o Vue controla o estado do checkbox através dochecked
.v-model
O estado inicial do checkbox é determinado pelo valor de
no modelo de dados (isChecked
).false
Quando a página carrega, o checkbox aparecerá desmarcado, refletindo o valor inicial de
.isChecked