当前位置:首页 > 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)。

自定义组件示例:

vue v-model实现

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

总结

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

标签: vuemodel
分享给朋友:

相关文章

vue实现流程

vue实现流程

Vue 实现流程的基本步骤 安装 Vue.js 可以通过 CDN 引入或使用 npm/yarn 安装。 CDN 方式: <script src="https://cdn.jsdelivr.…

分页实现vue

分页实现vue

分页实现(Vue) 在Vue中实现分页功能通常需要结合前端分页逻辑和后端API支持。以下是两种常见的实现方式: 前端分页实现 适用于数据量较小的情况,直接在客户端完成分页逻辑。 <templ…

vue mvvm实现

vue mvvm实现

Vue MVVM 实现原理 Vue.js 是一个基于 MVVM(Model-View-ViewModel)模式的框架,其核心是通过数据绑定和响应式系统实现视图与数据的自动同步。以下是 Vue 实现 M…

vue实现treeview

vue实现treeview

Vue 实现 TreeView 的方法 使用递归组件实现 TreeView 递归组件是 Vue 中实现 TreeView 的常见方式。通过组件调用自身,可以轻松处理嵌套的树形结构数据。 <te…

vue 实现分屏

vue 实现分屏

Vue 实现分屏的方法 使用 CSS Flexbox 或 Grid 布局 通过 CSS Flexbox 或 Grid 布局可以轻松实现分屏效果。在 Vue 组件中定义两个或多个区域,并使用 CSS 控…

vue实现单击

vue实现单击

Vue 实现单击事件的方法 在 Vue 中实现单击事件可以通过 v-on 指令或简写的 @ 符号绑定事件处理器。以下是几种常见的实现方式: 基础用法 通过 v-on:click 或 @click 绑…