v-model双向绑定原理解析

v-model 是 Vue.js 中用于实现表单元素和数据之间双向绑定的指令。其工作原理如下:

1. 基本概念

v-model 将表单元素的 value 属性与 Vue 实例的数据属性绑定,并在输入时自动更新数据。

2. 实现原理

v-model 本质上是语法糖,结合了 v-bindv-on

  • v-bind: 将数据绑定到表单元素的 value 属性。
  • v-on: 监听输入事件,更新数据。

例如:

ini 复制代码
<input v-model="message">

等价于:

ini 复制代码
<input :value="message" @input="message = $event.target.value">

3. 不同表单元素的处理

v-model 会根据不同的表单元素自动适配:

  • 文本输入框 ( <input type="text"> ) : 使用 value 属性和 input 事件。
  • 复选框 ( <input type="checkbox"> ) : 使用 checked 属性和 change 事件。
  • 单选按钮 ( <input type="radio"> ) : 使用 checked 属性和 change 事件。
  • 下拉菜单 ( <select> ) : 使用 value 属性和 change 事件。

4. 自定义组件中的 v-model

在自定义组件中,v-model 默认使用 value 作为 prop,input 作为事件。可以通过 model 选项自定义 prop 和事件名。

例如:

ini 复制代码
Vue.component('custom-input', {
  props: ['value'],
  template: `
    <input
      :value="value"
      @input="$emit('input', $event.target.value)"
    >
  `
});

5. Vue 3 中的变化

Vue 3 中,v-model 的默认 prop 改为 modelValue,事件改为 update:modelValue,并支持多个 v-model 绑定。

例如:

ini 复制代码
app.component('custom-input', {
  props: ['modelValue'],
  template: `
    <input
      :value="modelValue"
      @input="$emit('update:modelValue', $event.target.value)"
    >
  `
});

总结

v-model 通过 v-bindv-on 实现双向绑定,自动适配不同表单元素,并在自定义组件中提供灵活的 prop 和事件配置。

相关推荐
程序员爱钓鱼3 分钟前
Go语言实战案例 — 项目实战篇:简易博客系统(支持评论)
前端·后端·go
excel7 小时前
ES6 中函数的双重调用方式:fn() 与 fn\...``
前端
可乐爱宅着7 小时前
全栈框架next.js入手指南
前端·next.js
你的人类朋友9 小时前
什么是API签名?
前端·后端·安全
会豪11 小时前
Electron-Vite (一)快速构建桌面应用
前端
中微子11 小时前
React 执行阶段与渲染机制详解(基于 React 18+ 官方文档)
前端
唐某人丶11 小时前
教你如何用 JS 实现 Agent 系统(2)—— 开发 ReAct 版本的“深度搜索”
前端·人工智能·aigc
中微子11 小时前
深入剖析 useState产生的 setState的完整执行流程
前端
遂心_11 小时前
JavaScript 函数参数传递机制:一道经典面试题解析
前端·javascript
Gracemark11 小时前
高德地图-地图选择经纬度问题【使用输入提示-使用Autocomplete进行联想输入】(复盘)
vue.js