当前位置:首页 > 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" />

等价于:

vue v model 实现

<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 绑定。

示例代码:

vue 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 进一步扩展了其功能,支持多个绑定和自定义命名。

标签: vuemodel
分享给朋友:

相关文章

vue实现购物按钮

vue实现购物按钮

Vue 购物按钮实现方法 基础按钮实现 使用 Vue 的模板语法创建基础按钮组件,绑定点击事件处理购物逻辑: <template> <button @click="addToC…

vue异步组建实现原理

vue异步组建实现原理

Vue 异步组件实现原理 Vue 的异步组件允许将组件按需加载,通常用于代码分割或延迟加载非关键组件。其核心原理基于 Promise 和动态导入。 基本实现方式 通过 defineAsyncComp…

vue实现点击

vue实现点击

实现点击事件的基本方法 在Vue中实现点击事件可以通过v-on指令或@简写方式绑定。以下是常见的点击事件绑定方法: <template> <button v-on:click=…

vue实现input

vue实现input

Vue 实现 Input 输入框的方法 基本双向绑定 使用 v-model 指令实现双向数据绑定,适用于大多数表单场景: <template> <input v-model="…

vue页面实现

vue页面实现

Vue 页面实现方法 创建 Vue 组件 使用 Vue 单文件组件(SFC)方式创建页面,文件扩展名为 .vue。一个基本的 Vue 组件包含三个部分:模板(template)、脚本(script)和…

vue实现文字

vue实现文字

Vue 中实现文字显示的方法 在 Vue 中实现文字显示可以通过多种方式,包括插值表达式、指令、组件等。以下是几种常见的实现方法: 插值表达式 使用双大括号 {{ }} 进行文本插值,这是 Vue…