Carregando...

Formulários e Entradas

Formulários e Entradas em Vue.js são fundamentais para capturar dados do usuário, validar informações e interagir de maneira dinâmica com a interface. Eles permitem criar experiências reativas, onde mudanças nos inputs são refletidas imediatamente no modelo de dados, graças ao recurso de binding bidirecional fornecido pelo v-model. Esse mecanismo elimina a necessidade de manipulação direta do DOM, promovendo código mais limpo, seguro e eficiente.
Em projetos reais, formulários são usados para cadastro de usuários, login, filtros de busca, configuração de preferências e qualquer situação que demande interação do usuário com a aplicação. Neste tutorial, vamos explorar como criar e gerenciar formulários de maneira avançada, utilizando conceitos como estrutura de dados, algoritmos para validação, princípios de OOP e boas práticas de Vue.js.
Após este conteúdo, você será capaz de construir formulários reativos, validar entradas de maneira modular, tratar erros de forma robusta e aplicar padrões de design que melhoram a escalabilidade e manutenção do seu código. Além disso, entenderá como formular dados para requisições HTTP de forma segura e otimizada, integrando o formulário ao restante da arquitetura do sistema de maneira eficiente e profissional.

Exemplo Básico <template>

text
TEXT Code
<div>
<h2>Formulário de Cadastro</h2>
<form @submit.prevent="submitForm">
<label for="name">Nome:</label>
<input type="text" id="name" v-model="user.name" required />

<label for="email">Email:</label>
<input type="email" id="email" v-model="user.email" required />

<button type="submit">Enviar</button>
</form>
<p v-if="submitted">Cadastro realizado: {{ user.name }} - {{ user.email }}</p>

</div>
</template>

<script>
export default {
data() {
return {
user: {
name: '',
email: ''
},
submitted: false
}
},
methods: {
submitForm() {
if(this.user.name && this.user.email) {
this.submitted = true;
}
}
}
}
</script>

Neste exemplo, o v-model cria o binding bidirecional entre os campos de input e o objeto user no data, garantindo que alterações na interface reflitam no modelo e vice-versa. O modificador @submit.prevent evita o comportamento padrão do HTML, permitindo a execução de lógica personalizada no método submitForm. O flag submitted controla a renderização condicional da mensagem de feedback usando v-if. Esse padrão demonstra como Vue.js permite manipular formulários de forma reativa e segura, aplicando boas práticas sem acessar diretamente o DOM.

Exemplo Prático <template>

text
TEXT Code
<div>
<h2>Formulário Avançado com Validação</h2>
<form @submit.prevent="submitForm">
<label for="name">Nome:</label>
<input type="text" id="name" v-model="user.name" @input="validateName" required />
<span v-if="errors.name" class="error">{{ errors.name }}</span>

<label for="email">Email:</label>
<input type="email" id="email" v-model="user.email" @input="validateEmail" required />
<span v-if="errors.email" class="error">{{ errors.email }}</span>

<label for="password">Senha:</label>
<input type="password" id="password" v-model="user.password" @input="validatePassword" required />
<span v-if="errors.password" class="error">{{ errors.password }}</span>

<button type="submit" :disabled="hasErrors">Enviar</button>
</form>
<p v-if="submitted">Cadastro realizado: {{ user.name }} - {{ user.email }}</p>

</div>
</template>

<script>
export default {
data() {
return {
user: {
name: '',
email: '',
password: ''
},
errors: {},
submitted: false
}
},
computed: {
hasErrors() {
return Object.keys(this.errors).length > 0;
}
},
methods: {
validateName() {
this.errors.name = this.user.name.length < 3 ? 'Nome deve ter pelo menos 3 caracteres' : '';
},
validateEmail() {
const regex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
this.errors.email = !regex.test(this.user.email) ? 'Email inválido' : '';
},
validatePassword() {
this.errors.password = this.user.password.length < 6 ? 'Senha deve ter pelo menos 6 caracteres' : '';
},
submitForm() {
this.validateName();
this.validateEmail();
this.validatePassword();
if(!this.hasErrors) {
this.submitted = true;
}
}
}
}
</script>

Este exemplo avançado mostra validação em tempo real utilizando métodos modulares que atualizam o objeto errors de forma reativa. A propriedade computada hasErrors desabilita o botão de envio caso existam erros, garantindo melhor experiência do usuário. As funções validateName, validateEmail e validatePassword são separadas para modularidade, reutilização e manutenção mais simples. Este padrão é aplicável em aplicações reais, promovendo formulários robustos, seguros e escaláveis.

📊 Tabela de Referência

Vue.js Element/Concept Description Usage Example
v-model Binding bidirecional entre input e dados <input v-model="user.name" />
@input Executa lógica ou validação em alterações do input <input @input="validateName" />
computed Monitoramento reativo de estado e validação hasErrors() { return Object.keys(errors).length > 0 }
methods Organização de lógica de validação e envio submitForm() { /* valida e envia */ }
v-if Renderização condicional de mensagens de erro <span v-if="errors.email">{{ errors.email }}</span>

Para boas práticas em formulários Vue.js, utilize v-model para binding, métodos para validação modular e computed properties para monitorar erros de forma eficiente. Evite alterar diretamente o DOM ou ignorar validações, o que pode gerar problemas de manutenção e performance. Use Vue Devtools para depuração e mantenha sempre estruturas de dados limpas e algoritmos eficientes. Segurança é essencial: valide entradas tanto no cliente quanto no servidor e evite manipulação direta de dados sensíveis.

Ao dominar formulários e entradas, você poderá construir interfaces reativas e seguras, aplicáveis em cadastros, logins, filtros e páginas de configuração. Próximos passos incluem formulários dinâmicos, comunicação entre componentes, gerenciamento de estado com Vuex ou Pinia, e otimização de desempenho e experiência do usuário em aplicações complexas.

🧠 Teste Seu Conhecimento

Pronto para Começar

Teste Seu Conhecimento

Desafie-se com este questionário interativo e veja o quão bem você entende o tópico

4
Perguntas
🎯
70%
Para Passar
♾️
Tempo
🔄
Tentativas

📝 Instruções

  • Leia cada pergunta cuidadosamente
  • Selecione a melhor resposta para cada pergunta
  • Você pode refazer o quiz quantas vezes quiser
  • Seu progresso será mostrado no topo