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 和事件配置。

相关推荐
默恋~微凉5 分钟前
shell(八)——WEB与Nginx
开发语言·前端·php
要加油哦~15 分钟前
nrm | npm 的镜像管理工具
前端·npm·node.js·nrm
想不明白的过度思考者15 分钟前
基于 Spring Boot 的 Web 三大核心交互案例精讲
前端·spring boot·后端·交互·javaee
孟祥_成都16 分钟前
不易懂你打我!写给前端和小白的 大模型(ChatGPT) 工作基本原理!
前端·人工智能
恋猫de小郭20 分钟前
回顾 Flutter Flight Plans ,关于 Flutter 的现状和官方热门问题解答
android·前端·flutter
●VON21 分钟前
从零开始:用 Electron 构建你的第一个桌面应用
前端·javascript·electron
艾小码22 分钟前
从源码到npm:手把手带你发布Vue 3组件库
前端·vue.js·npm
张风捷特烈27 分钟前
FlutterUnit3.4.1 | 来场三方库的收录狂欢吧~
android·前端·flutter
t***L2661 小时前
JavaScript在机器学习中的库
开发语言·javascript·机器学习
乔冠宇1 小时前
CSS3中的新增属性总结
前端·javascript·css3