当前位置:首页 > VUE

vue v model实现

2026-02-19 01:44:44VUE

Vue v-model 实现原理

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

在表单元素上的实现

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

<input v-model="message">

等价于:

<input 
  :value="message" 
  @input="message = $event.target.value"
>
  • :value 将数据绑定到元素的 value 属性。
  • @input 监听输入事件,更新数据。

在自定义组件上的实现

对于自定义组件,v-model 默认使用 value 属性和 input 事件:

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

等价于:

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

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

props: ['value'],
methods: {
  updateValue(newValue) {
    this.$emit('input', newValue);
  }
}

自定义 v-model 的属性和事件

从 Vue 2.2.0 开始,可以通过 model 选项自定义 v-model 的属性和事件:

export default {
  model: {
    prop: 'checked',  // 使用 checked 属性代替 value
    event: 'change'   // 使用 change 事件代替 input
  },
  props: ['checked'],
  methods: {
    handleChange() {
      this.$emit('change', newValue);
    }
  }
}

Vue 3 中的变化

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

  • 默认使用 modelValue 属性和 update:modelValue 事件。
  • 支持多个 v-model 绑定,如 v-model:title="title"
<custom-component v-model="message"></custom-component>

等价于:

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

组件内部实现:

props: ['modelValue'],
emits: ['update:modelValue'],
methods: {
  updateValue(newValue) {
    this.$emit('update:modelValue', newValue);
  }
}

总结

v-model 的核心是通过属性和事件的组合实现双向绑定。在表单元素中自动适配原生行为,在组件中可通过 model 选项(Vue 2)或默认规则(Vue 3)灵活配置。理解其实现原理有助于在需要时自定义绑定逻辑。

vue v model实现

标签: vuemodel
分享给朋友:

相关文章

vue实现alert

vue实现alert

实现自定义 Alert 组件 在 Vue 中可以通过组件化方式实现自定义 Alert 弹窗。以下是基于 Vue 3 的实现示例: 组件代码 (Alert.vue) <template>…

vue实现滑块

vue实现滑块

Vue 实现滑块组件的方法 使用原生 HTML 和 Vue 指令 通过 Vue 的 v-model 和事件监听实现基础滑块功能。创建一个包含 input 元素的组件,类型设置为 range,并绑定到…

vue实现频道

vue实现频道

Vue实现频道功能的方法 使用Vue Router动态路由 通过Vue Router的动态路由功能可以轻松实现频道切换。在路由配置中定义动态参数,组件内通过this.$route.params获取当前…

利用vue 实现

利用vue 实现

以下是利用 Vue 实现常见功能的几种方法,分为不同场景和技术要点: 数据绑定与响应式更新 Vue 的核心特性是数据绑定,通过 v-model 实现双向绑定: <template>…

vue 实现fadeout

vue 实现fadeout

Vue 实现淡出效果 在 Vue 中实现淡出(fade-out)效果可以通过 CSS 过渡或动画结合 Vue 的动态渲染功能完成。以下是几种常见方法: 使用 Vue 过渡(Transition)组件…

vue实现心电图

vue实现心电图

Vue 实现心电图效果 在 Vue 中实现心电图效果通常需要结合 Canvas 或 SVG 进行动态绘图,模拟心电图数据的实时变化。以下是两种实现方式的核心思路和代码示例: 使用 Canvas…