第一阶段:Vue 基础入门(第 6 天)

Vue 的 v-model 双向数据绑定

核心知识点
  1. v-model 的作用

    • 实现表单元素与数据的双向绑定:数据变化自动更新视图,视图变化自动更新数据。
    • 本质是 v-bind(绑定数据) + v-on(监听事件)的语法糖。
  2. 不同表单元素的绑定方式

    • 文本输入框(<input type="text">

      html 复制代码
      <input type="text" v-model="message">
      <p>输入内容:{{ message }}</p>
    • 单选按钮(<input type="radio">

      html 复制代码
      <input type="radio" value="A" v-model="selected"> A
      <input type="radio" value="B" v-model="selected"> B
      <p>选中:{{ selected }}</p>
    • 复选框(<input type="checkbox">

      • 单个复选框:绑定布尔值

        html 复制代码
        <input type="checkbox" v-model="isAgree"> 同意协议
      • 多个复选框:绑定数组

        html 复制代码
        <input type="checkbox" value="Vue" v-model="techs"> Vue
        <input type="checkbox" value="React" v-model="techs"> React
        <p>已选:{{ techs }}</p>
    • 下拉选择框(<select>

      html 复制代码
      <select v-model="fruit">
        <option value="apple">苹果</option>
        <option value="banana">香蕉</option>
      </select>
      <p>选中:{{ fruit }}</p>
  3. 修饰符

    • .lazy :将 input 事件改为 change 事件(延迟更新,失焦后同步)

      html 复制代码
      <input v-model.lazy="message">  
    • .number :将输入值转为数字类型

      html 复制代码
      <input v-model.number="age" type="number">  
    • .trim :自动去除首尾空格

      html 复制代码
      <input v-model.trim="username">  

案例代码
html 复制代码
<div id="app">
  <!-- 文本输入框 -->
  <input type="text" v-model="text" placeholder="输入文本">
  <p>实时显示:{{ text }}</p>

  <!-- 单选按钮 -->
  <input type="radio" value="male" v-model="gender"> 男
  <input type="radio" value="female" v-model="gender"> 女
  <p>性别:{{ gender }}</p>

  <!-- 多选复选框 -->
  <input type="checkbox" value="跑步" v-model="hobbies"> 跑步
  <input type="checkbox" value="阅读" v-model="hobbies"> 阅读
  <p>爱好:{{ hobbies }}</p>

  <!-- 下拉选择框 -->
  <select v-model="city">
    <option value="beijing">北京</option>
    <option value="shanghai">上海</option>
  </select>
  <p>城市:{{ city }}</p>

  <!-- 修饰符示例 -->
  <input v-model.lazy="lazyText" placeholder=".lazy 失焦后更新">
  <p>延迟更新:{{ lazyText }}</p>

  <input v-model.number="num" type="number" placeholder=".number 转为数字">
  <p>数字类型:{{ typeof num }}</p>

  <input v-model.trim="trimmedText" placeholder=".trim 去除首尾空格">
  <p>去除空格:{{ trimmedText }}</p>
</div>

<script>
new Vue({
  el: '#app',
  data: {
    text: '',
    gender: '',
    hobbies: [],
    city: '',
    lazyText: '',
    num: null,
    trimmedText: ''
  }
});
</script>

总结要点
  1. 灵活适配表单类型
    • v-model 根据表单元素类型自动适配绑定的数据类型(如文本→字符串、多选→数组)。
  2. 修饰符优化体验
    • .lazy 减少频繁更新,.number 避免类型错误,.trim 提升数据纯净度。
  3. 双向绑定本质
    • 底层通过 v-bind 绑定数据 + v-on 监听 inputchange 事件实现。

示例效果

  • 文本输入框内容实时同步到页面。
  • 单选/复选框选中后,数据立即更新。
  • .lazy 修饰符需失焦后触发更新,.number 将输入转为数字类型。
相关推荐
小江的记录本2 分钟前
【Redis】Redis常用命令速查表(完整版)
java·前端·数据库·redis·后端·spring·缓存
Csvn6 分钟前
状态管理方案对比(Context、Zustand、Jotai 选型指南)
前端
Irene19917 分钟前
JavaScript 事件循环(Event Loop) 的运作流程(附:queueMicrotask() 将一个回调函数立即排队到微任务队列中)
javascript·事件循环·宏任务·微任务·调用栈·queuemicrotask
snow_yan7 分钟前
基于 json-render 的流式表单渲染方案
前端·react.js·llm
倒计时的尽头是什么9 分钟前
避免渲染大量数据造成页面卡顿——虚拟滚动
vue.js
wobi_baoyan9 分钟前
【已解决】使用Maven打包发生或者启动Spring Boot项目发生 错误: 不支持发行版本 17
服务器·前端·javascript
Dylan~~~9 分钟前
Go语言Web框架选型指南:从入门到精通
开发语言·前端·golang
学以智用11 分钟前
# TypeScript 高级特性(核心+实用)
前端·javascript·typescript
学以智用12 分钟前
TypeScript 核心基础:类型/变量 + 函数 + 接口
前端·javascript·typescript
SuperEugene15 分钟前
Vue3 组件解耦实战:Props/Emit/ 事件总线用法 + 避坑指南|Vue 组件与模板规范篇
前端·javascript·vue.js