当前位置:首页 > VUE

vue v model 实现原理

2026-01-21 20:00:33VUE

Vue v-model 实现原理

v-model 是 Vue 中用于实现表单元素和数据双向绑定的指令。其本质是一个语法糖,结合了 :value 绑定和 @input 事件监听。

基本实现机制

对于原生表单元素(如 input、textarea、select),v-model 会根据不同的元素类型自动绑定对应的属性和事件:

  • 文本输入框(input type="text")
    绑定 value 属性和 input 事件:

    <input :value="message" @input="message = $event.target.value" />
  • 复选框(checkbox)
    绑定 checked 属性和 change 事件:

    <input 
      type="checkbox" 
      :checked="isChecked" 
      @change="isChecked = $event.target.checked" 
    />
  • 单选按钮(radio)
    绑定 checked 属性和 change 事件:

    <input 
      type="radio" 
      :checked="selectedOption === value" 
      @change="selectedOption = value" 
    />

自定义组件中的 v-model

在 Vue 2.x 中,自定义组件默认通过 value prop 和 input 事件实现 v-model:

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

在 Vue 3.x 中,可以通过 modelValue prop 和 update:modelValue 事件实现:

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

底层原理

  1. 编译阶段
    Vue 模板编译器会将 v-model 转换为对应的 :value@input(或其他事件)的组合。

  2. 运行时处理
    根据元素类型动态绑定对应的属性和事件,确保数据变化能同步到视图,视图输入能同步到数据。

  3. 自定义组件扩展
    支持通过 model 选项(Vue 2.x)或直接定义 prop/event(Vue 3.x)实现自定义 v-model 逻辑。

vue v model 实现原理

标签: 原理vue
分享给朋友:

相关文章

vue实现多选div

vue实现多选div

实现多选 DIV 的基本思路 在 Vue 中实现多选 DIV 功能,可以通过以下方法实现。主要思路是利用 v-model 绑定选中状态,结合 CSS 类名动态切换样式。 数据准备与模板结构 定义一…

vue实现多级表头

vue实现多级表头

Vue 实现多级表头的方法 使用 el-table 组件 Element UI 的 el-table 组件支持多级表头的实现,通过嵌套 el-table-column 即可完成。 <el-ta…

vue表单实现搜索

vue表单实现搜索

实现Vue表单搜索功能 在Vue中实现表单搜索功能通常涉及表单绑定、事件处理和搜索逻辑。以下是具体实现方法: 数据绑定与表单结构 使用v-model实现表单与Vue数据的双向绑定: <t…

前端vue登录功能实现

前端vue登录功能实现

Vue 登录功能实现步骤 创建登录表单组件 在 Vue 项目中创建一个登录组件,通常命名为 Login.vue。该组件包含用户名和密码输入框以及提交按钮。 <template> &l…

vue实现展开与收起

vue实现展开与收起

Vue 实现展开与收起功能 在 Vue 中实现展开与收起功能可以通过多种方式完成,以下是一些常见的方法: 使用 v-show 或 v-if 控制显示 通过 Vue 的指令 v-show 或 v-if…

vue实现一个标签选择

vue实现一个标签选择

Vue 标签选择组件实现 基础实现 使用 Vue 的 v-for 和 v-model 指令可以快速实现标签选择功能: <template> <div class="tag-se…