当前位置: 首页 > article >正文

青少年编程与数学 02-006 前端开发框架VUE 12课题、表单绑定

青少年编程与数学 02-006 前端开发框架VUE 12课题、表单绑定

  • 一、表单绑定
      • 基本用法
      • 修饰符
      • 多行文本
      • 选择类元素
      • 多选
      • 表单数据绑定的注意事项
  • 二、应用示例

课题摘要:本文介绍了Vue中的表单绑定,特别是使用v-model指令实现输入元素与数据状态的双向绑定。基本用法包括文本输入、多行文本和选择类元素的绑定,以及修饰符如.lazy.number.trim来扩展v-model功能。对于多选,v-model绑定的是一个数组。文章强调了确保绑定变量的响应式和在自定义组件中正确使用propsemits的重要性。最后,通过一个用户注册表单的应用示例,展示了如何使用v-model进行数据绑定、表单验证和提交处理。这个示例包括用户名、邮箱、密码和爱好的多选框,以及如何显示和重置提交的数据。


一、表单绑定

在 Vue 中,表单输入数据绑定通常是指使用 v-model 指令将表单输入元素与应用的数据状态进行双向绑定。这意味着当用户在输入框中输入数据时,Vue 实例的数据会相应更新,反之亦然,如果数据变化了,输入框中显示的内容也会更新。

基本用法

对于基本类型的输入(如 textpasswordemail 等),v-model 可以简化数据绑定的过程:

<template>
  <input v-model="message" placeholder="Enter a message">
</template>

<script setup>
import { ref } from 'vue';

const message = ref('');
</script>

在这个例子中,message 是一个响应式引用,它与 <input> 元素双向绑定。用户在输入框中的输入会更新 message 的值,message 的变化也会反映到输入框中。

修饰符

Vue 提供了几个修饰符来扩展 v-model 的功能:

  • .lazy:在默认情况下,v-modelinput 事件中更新数据,使用 .lazy 修饰符会改为在 change 事件中更新。
  • .number:输入的数据会自动转换为数值类型。
  • .trim:输入的数据会自动去除首尾空白字符。

例如:

<input v-model.lazy="message" placeholder="Lazy update">
<input v-model.number="age" type="number" placeholder="Age">
<input v-model.trim="searchQuery" placeholder="Search...">

多行文本

对于 textarea 元素,v-model 同样适用:

<template>
  <textarea v-model="description" placeholder="Enter a description"></textarea>
</template>

<script setup>
import { ref } from 'vue';

const description = ref('');
</script>

选择类元素

对于 select 元素和 option 元素,v-model 用于绑定选中的值:

<template>
  <select v-model="selectedOption">
    <option disabled value="">Please select one</option>
    <option>Option 1</option>
    <option>Option 2</option>
    <option>Option 3</option>
  </select>
</template>

<script setup>
import { ref } from 'vue';

const selectedOption = ref('');
</script>

多选

对于多选 checkbox 或多选 selectv-model 绑定的是一个数组:

<template>
  <input type="checkbox" v-model="checkedNames" value="Jack">
  <input type="checkbox" v-model="checkedNames" value="John">
  <input type="checkbox" v-model="checkedNames" value="Mike">
</template>

<script setup>
import { ref } from 'vue';

const checkedNames = ref([]);
</script>

表单数据绑定的注意事项

  • 确保 v-model 绑定的变量是响应式的,使用 refreactive 创建。
  • 对于复杂数据结构,可能需要使用 v-model.sync 修饰符(Vue 2.x)或 update:modelValue 事件(Vue 3.x)。
  • 在自定义组件中使用 v-model 时,需要正确地使用 propsemits
  • 对于 radio 元素,v-model 绑定的值应与其中一个 value 属性匹配。

表单输入数据绑定是 Vue 中处理用户输入和数据状态同步的强大功能,它简化了表单处理的复杂性,并提高了开发效率。

二、应用示例

下面是一个使用 Vue 3 组合式 API 的表单输入数据绑定的综合应用示例。这个示例创建了一个用户注册表单,包括用户名、邮箱、密码和爱好的多选框。表单数据与响应式状态进行双向绑定,并且包含了表单验证和提交功能。

App.vue

<template>
  <div>
    <h1>Register</h1>
    <form @submit.prevent="submitForm">
      <div>
        <label for="username">Username:</label>
        <input type="text" id="username" v-model="user.username" required>
      </div>
      <div>
        <label for="email">Email:</label>
        <input type="email" id="email" v-model="user.email" required>
      </div>
      <div>
        <label for="password">Password:</label>
        <input type="password" id="password" v-model="user.password" required>
      </div>
      <div>
        <label>Hobbies:</label>
        <input type="checkbox" id="hobby1" v-model="user.hobbies" value="Reading">
        <label for="hobby1">Reading</label>
        <input type="checkbox" id="hobby2" v-model="user.hobbies" value="Swimming">
        <label for="hobby2">Swimming</label>
        <input type="checkbox" id="hobby3" v-model="user.hobbies" value="Coding">
        <label for="hobby3">Coding</label>
      </div>
      <button type="submit">Register</button>
    </form>
    <p>Submitted Data:</p>
    <pre>{{ submittedData }}</pre>
  </div>
</template>

<script setup>
import { ref } from 'vue';

const user = ref({
  username: '',
  email: '',
  password: '',
  hobbies: []
});

const submittedData = ref(null);

function submitForm() {
  if (user.value.username && user.value.email && user.value.password) {
    submittedData.value = { ...user.value };
    user.value = {
      username: '',
      email: '',
      password: '',
      hobbies: []
    }; // Reset form
  } else {
    alert('Please fill in all fields');
  }
}
</script>

<style>
input, button {
  margin: 10px 0;
  padding: 8px;
}

button {
  cursor: pointer;
}

div {
  margin-bottom: 10px;
}

label {
  margin-right: 10px;
}

form {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

pre {
  background-color: #f0f0f0;
  border: 1px solid #ddd;
  padding: 10px;
  margin-top: 20px;
}
</style>

在这个示例中:

  • 使用 ref 创建了一个响应式对象 user,它包含四个属性:usernameemailpasswordhobbies
  • 使用 v-model 实现了输入框和复选框的双向数据绑定。
  • 定义了一个 submitForm 方法,当表单提交时,它会检查是否所有字段都已填写。如果填写完整,它会阻止默认的表单提交行为,复制 user 对象的当前值到 submittedData 中,并重置 user 对象,以便表单可以再次填写。
  • 使用 <pre> 标签显示提交的数据,以便格式化显示对象。

这个示例展示了如何在 Vue 3 的组合式 API 中使用 v-model 实现数据的双向绑定,并处理表单提交和验证。


http://www.kler.cn/a/471906.html

相关文章:

  • 【Linux】深入理解文件系统(超详细)
  • Python 中几个库的安装与测试
  • 如何 cURL Elasticsearch:进入 Shell
  • 《Opencv》信用卡信息识别项目
  • STM32裸机开发转FreeRTOS教程
  • 精选2款.NET开源的博客系统
  • C#高级:递归4-根据一颗树递归生成数据列表
  • 通过 ulimit 和 sysctl 调整Linux系统性能
  • ThinkPHP 8高效构建Web应用-获取请求对象
  • VUE条件树查询 自定义条件节点
  • 【JMeter】配置元件Config Element
  • 浅谈棋牌游戏开发流程四:核心业务逻辑(二)——房间匹配与对局流程
  • Java 日期时间格式化标准
  • 【HarmonyOS NEXT】鸿蒙应用实现屏幕录制详解和源码
  • 1.07 标准IO
  • 数据结构:LinkedList与链表—无头双向链表(二)
  • STM32 拓展 电源控制
  • 大数据架构设计:数据分层治理的全景指南
  • 人机交互复习笔记
  • ECharts系列:echart中折线图折线设置不平滑显示
  • 【Jsoncpp】manipulating JSON data in C++
  • 时间格式转换
  • 软件开发为什么要用CI/CD方法
  • 《量子比特大阅兵:不同类型量子比特在人工智能领域的优劣势剖析》
  • 如何制作一份好的年终总结PPT?-中小企实战运营和营销工作室博客
  • RAFT:随机退火森林