当前位置:首页 > VUE

vue v model 实现

2026-02-19 23:34:09VUE

Vue v-model 实现原理

Vue 的 v-model 是一个语法糖,用于在表单元素或组件上实现双向数据绑定。以下是其实现原理和具体用法:

表单元素上的实现

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

  • inputtextarea 元素:绑定 value 属性和 input 事件。
  • checkboxradio 元素:绑定 checked 属性和 change 事件。
  • select 元素:绑定 value 属性和 change 事件。

示例代码:

<input v-model="message" />

等价于:

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

自定义组件上的实现

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

示例代码:

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

等价于:

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

自定义组件内部实现:

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

修改默认 prop 和事件

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

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

Vue 3 中的变化

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

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

示例代码:

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

等价于:

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

自定义组件内部实现:

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

多个 v-model 绑定

Vue 3 支持在单个组件上使用多个 v-model

<user-name
  v-model:first-name="firstName"
  v-model:last-name="lastName"
/>

等价于:

<user-name
  :firstName="firstName"
  @update:firstName="firstName = $event"
  :lastName="lastName"
  @update:lastName="lastName = $event"
/>

总结

v-model 的核心是通过 prop 和事件实现双向绑定。在表单元素上自动处理属性和事件,在组件中则提供灵活的配置选项。Vue 3 进一步扩展了其功能,支持多个绑定和自定义命名。

vue v model 实现

标签: vuemodel
分享给朋友:

相关文章

vue组件的实现

vue组件的实现

Vue 组件的实现方式 Vue 组件可以通过多种方式实现,以下是常见的几种方法: 单文件组件 (SFC) 使用 .vue 文件,包含模板、脚本和样式三部分: <template>…

vue实现画圆弧并着色

vue实现画圆弧并着色

在 Vue 中实现画圆弧并着色 使用 Canvas API 绘制圆弧 在 Vue 组件的 mounted 钩子中,通过 Canvas API 绘制圆弧。创建一个 canvas 元素并获取其上下文:…

vue实现mvc

vue实现mvc

Vue 实现 MVC 模式 Vue 本身是一个 MVVM(Model-View-ViewModel)框架,但可以通过结构调整实现 MVC(Model-View-Controller)模式。以下是具体实…

vue实现公告

vue实现公告

Vue 实现公告功能的方法 公告功能通常需要实现滚动展示、自动切换或固定显示的效果。以下是几种常见的实现方式: 使用 marquee 标签实现滚动公告 <template> <…

vue alert实现

vue alert实现

使用 Vue 实现 Alert 组件 在 Vue 中实现 Alert 组件可以通过自定义组件或结合第三方库完成。以下是几种常见方法: 自定义 Alert 组件 创建一个可复用的 Alert 组件,…

vue实现骰子

vue实现骰子

Vue 实现骰子功能 创建 Vue 组件 在 Vue 项目中创建一个骰子组件,例如 Dice.vue。该组件包含骰子的外观和逻辑。 <template> <div class…