当前位置:首页 > VUE

vue v model实现

2026-01-18 09:18:01VUE

Vue v-model 的实现原理

Vue 的 v-model 是一个语法糖,用于在表单元素或组件上实现双向数据绑定。其本质是结合 value 属性和 input 事件的封装。

在表单元素上的实现

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

<input v-model="message">

等价于:

<input 
  :value="message" 
  @input="message = $event.target.value"
>

在自定义组件上的实现

在自定义组件中,v-model 默认会利用 value 属性和 input 事件实现双向绑定。例如:

<custom-input v-model="message"></custom-input>

等价于:

vue v model实现

<custom-input 
  :value="message" 
  @input="message = $event"
></custom-input>

组件内部需要通过 props 接收 value,并在值变化时触发 input 事件:

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

自定义 v-model 的 prop 和 event

从 Vue 2.2.0 开始,可以在组件中通过 model 选项修改默认的 propevent

Vue.component('my-checkbox', {
  model: {
    prop: 'checked',
    event: 'change'
  },
  props: ['checked'],
  template: `
    <input
      type="checkbox"
      :checked="checked"
      @change="$emit('change', $event.target.checked)"
    >
  `
})

这样使用时:

vue v model实现

<my-checkbox v-model="isChecked"></my-checkbox>

Vue 3 中的变化

在 Vue 3 中,v-model 的默认行为有所变化:

  • 默认使用 modelValue 作为 prop 而不是 value
  • 默认使用 update:modelValue 作为事件而不是 input

例如:

<custom-component v-model="message"></custom-component>

等价于:

<custom-component 
  :modelValue="message" 
  @update:modelValue="message = $event"
></custom-component>

可以通过参数支持多个 v-model 绑定:

<custom-component 
  v-model:first="firstName"
  v-model:last="lastName"
></custom-component>

实现原理总结

  1. 对于原生元素,v-model:value@input 的语法糖
  2. 对于组件,默认使用 value prop 和 input 事件(Vue 2)
  3. 可以通过 model 选项自定义 prop 和 event 名称
  4. Vue 3 中改为使用 modelValueupdate:modelValue
  5. Vue 3 支持多个 v-model 绑定

标签: vuemodel
分享给朋友:

相关文章

vue循环数组实现

vue循环数组实现

vue循环数组的实现方法 在Vue中循环数组主要通过v-for指令实现,以下是几种常见用法: 基本数组循环 使用v-for指令遍历数组,可以通过(item, index)的语法获取当前项和索引值:…

前端vue登录功能实现

前端vue登录功能实现

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

vue的艾特功能实现

vue的艾特功能实现

Vue 的 @ 功能实现 在 Vue 中实现类似社交平台的 @ 功能,通常涉及输入框的监听、用户匹配和选择插入。以下是具体实现方法: 监听输入框内容 使用 v-model 绑定输入框内容,并通过 @…

vue datepicker 实现

vue datepicker 实现

实现 Vue Datepicker 的基本方法 在 Vue 项目中实现日期选择功能,可以使用第三方库如 vue-datepicker 或 v-calendar。以下是两种常见实现方式: 安装 vue…

vue实现贴图

vue实现贴图

Vue 实现贴图功能 在Vue中实现贴图功能通常涉及将图片动态添加到指定位置或元素上。以下是几种常见实现方式: 使用v-bind动态绑定图片 通过数据驱动的方式动态更换图片源: <tem…

vue 方法实现

vue 方法实现

在 Vue 中,方法的实现通常通过 methods 选项完成。以下是 Vue 方法实现的核心要点和示例: 基本方法定义 在 Vue 组件中定义方法时,需将函数声明放在 methods 对象内。这些…