当前位置:首页 > VUE

vue v-model实现

2026-01-20 03:33:09VUE

Vue v-model 实现原理

Vue 的 v-model 是一个语法糖,用于在表单元素或自定义组件上实现双向数据绑定。其核心原理是通过结合 value 属性和 input 事件(或其他类似事件)来实现数据的同步。

在表单元素上的实现

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

<input v-model="message">

等价于:

<input 
  :value="message" 
  @input="message = $event.target.value"
>
  • :value 将数据 message 绑定到输入框的 value 属性。
  • @input 监听输入事件,将输入框的值赋给 message

在自定义组件上的实现

在自定义组件中,v-model 默认绑定 value 属性和 input 事件。可以通过 model 选项修改默认行为。

默认实现:

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

等价于:

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

自定义组件的实现:

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

修改默认的 prop 和事件

从 Vue 2.2.0 开始,可以通过 model 选项修改 v-model 绑定的 prop 和事件:

Vue.component('custom-component', {
  model: {
    prop: 'checked',  // 修改默认的 prop 为 checked
    event: 'change'   // 修改默认的事件为 change
  },
  props: ['checked'],
  template: `
    <input 
      type="checkbox" 
      :checked="checked" 
      @change="$emit('change', $event.target.checked)"
    >
  `
})

Vue 3 中的变化

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

  • 默认绑定 modelValue prop 和 update:modelValue 事件。
  • 支持多个 v-model 绑定(如 v-model:title)。

自定义组件示例:

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

总结

v-model 的核心是通过 prop 和事件的组合实现双向绑定。在表单元素中自动处理,在自定义组件中需要显式实现 prop 和事件的绑定。Vue 3 进一步扩展了其功能,支持更灵活的使用方式。

vue v-model实现

标签: vuemodel
分享给朋友:

相关文章

vue实现文档

vue实现文档

Vue 实现文档的方法 在 Vue 中实现文档功能可以通过多种方式,包括使用富文本编辑器、Markdown 解析或直接渲染 HTML。以下是几种常见的实现方法。 使用富文本编辑器 富文本编辑器如 T…

vue 页签实现

vue 页签实现

Vue 页签实现方法 在 Vue 中实现页签功能通常涉及动态组件、路由或状态管理。以下是几种常见的实现方式: 使用动态组件 通过 Vue 的 <component> 动态组件结合 v-…

vue实现文字播放栏

vue实现文字播放栏

Vue 实现文字播放栏(跑马灯效果) 方法一:使用 CSS 动画 + Vue 数据绑定 通过 CSS 的 @keyframes 实现动画效果,结合 Vue 的动态数据绑定控制内容。 <tem…

vue实现活动倒计时

vue实现活动倒计时

实现活动倒计时的基本思路 在Vue中实现活动倒计时通常需要获取当前时间与活动结束时间的差值,并将其转换为天、小时、分钟、秒的格式展示。通过定时器每秒更新显示的时间。 定义倒计时数据 在Vue组件的…

vue实现一个tab栏

vue实现一个tab栏

Vue 实现 Tab 栏 基础实现(选项式 API) <template> <div class="tab-container"> <div class="t…

vue全选实现

vue全选实现

Vue 全选实现方法 在 Vue 中实现全选功能通常涉及数据绑定和事件处理。以下是几种常见的实现方式: 基础实现方式 <template> <div> <i…