Elementos Input e Textarea no Vue.js
No contexto de vinculação bidirecional de dados (two-way data binding), o Vue.js utiliza a diretiva v-model
input
select
textarea
v-model
Input
Abaixo está um exemplo com elementos básicos de formulário:
<!DOCTYPE html>
<html>
<head>
<title>Explorando Vue.js</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css">
</head>
<script src="https://unpkg.com/vue"></script>
<body>
<div id="app" class="col-md-4 m-4">
<label>Login</label>
<input type="text" v-model="login" placeholder="Digite o login" class="form-control" />
<br>
<label>Senha</label>
<input type="password" v-model="password" placeholder="Digite a senha" class="form-control" />
<br>
<label>Idade</label>
<input type="number" v-model="age" min="18" placeholder="Digite a idade" class="form-control" />
<br>
<label>Data de Registro</label><br>
<input type="date" v-model="date" class="form-control" />
<br>
<div>
<h3>Informações Digitadas</h3>
<p>Login: {{login}}</p>
<p>Senha: {{'*'.repeat(password.length)}}
<p>Idade: {{age}}</p>
<p>Data de Registro: {{date}}</p>
</div>
</div>
<script>
Vue.createApp({
data() {
return {
login: '',
password: '',
date: '',
age: 18
};
}
}).mount('#app');
</script>
</body>
</html>
A diretiva v-model
value
input
input
value
No exemplo acima, os valores digitados nos campos são automaticamente sincronizados com as propriedades no Vue.

Textarea
O elemento textarea
v-model
<!DOCTYPE html>
<html>
<head>
<title>Explorando Vue.js</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css">
</head>
<body>
<script src="https://unpkg.com/vue"></script>
<div id="app" class="col-md-4 m-4">
<label>Digite um Comentário</label>
<textarea v-model="comment" class="form-control"></textarea>
<br>
<div>
<h3>Comentário</h3>
<p style="white-space: pre-line">{{comment}}</p>
</div>
</div>
<script>
Vue.createApp({
data() {
return {
comment: 'Escreva seu comentário aqui...'
};
}
}).mount('#app');
</script>
</body>
</html>

Quando a diretiva v-model é aplicada a um elemento textarea, não é possível usar interpolação de texto diretamente dentro do elemento, como no exemplo abaixo:
<textarea v-model="comment" class="form-control">{{ comment }}</textarea>
Além disso, ao inserir texto no textarea usando a tecla Enter, as quebras de linha são mantidas. Para que essas quebras sejam exibidas corretamente no conteúdo renderizado na página, é necessário aplicar o estilo CSS apropriado:
<p style="white-space: pre-line">{{comment}}</p>