当前位置:首页 > VUE

vue v model的实现

2026-01-23 09:56:19VUE

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 事件。可以通过 model 选项修改默认行为:

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

使用方式:

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

Vue 2 和 Vue 3 的区别

Vue 2:

  • 默认使用 value 属性和 input 事件。
  • 通过 model 选项自定义属性和事件名。

Vue 3:

  • 默认使用 modelValue 属性和 update:modelValue 事件。
  • 通过 v-model:arg 支持多个双向绑定:
    <custom-input v-model:title="title" v-model:content="content"></custom-input>

实现自定义 v-model

在 Vue 3 中,可以通过 propsemit 实现自定义 v-model

export default {
  props: ['modelValue'],
  emits: ['update:modelValue'],
  template: `
    <input
      :value="modelValue"
      @input="$emit('update:modelValue', $event.target.value)"
    >
  `
}

修饰符支持

v-model 支持修饰符,如 .lazy.number.trim

  • .lazy:将 input 事件改为 change 事件。
  • .number:将输入值转为数字。
  • .trim:去除输入值首尾空格。

实现原理是通过解析修饰符并调整事件监听或值处理逻辑。

vue v model的实现

标签: vuemodel
分享给朋友:

相关文章

实现简易vue

实现简易vue

实现简易 Vue 的核心思路 Vue 的核心功能包括数据响应式、模板编译和虚拟 DOM。以下是一个简易实现方案,涵盖核心功能模块。 数据响应式系统 通过 Object.definePropert…

vue实现计算

vue实现计算

Vue 实现计算的方法 在 Vue 中实现计算功能可以通过多种方式完成,主要包括计算属性(computed)、方法(methods)和侦听器(watch)。以下是具体的实现方法: 计算属性(Com…

vue实现频道

vue实现频道

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

vue实现树

vue实现树

Vue 实现树形结构的方法 使用递归组件实现树形结构 递归组件是Vue中实现树形结构的常见方式。通过组件调用自身,可以轻松构建多层嵌套的树形数据。 <template> <ul…

vue实现布局

vue实现布局

Vue 实现布局方法 Vue 提供了多种方式实现页面布局,可以通过组件化、CSS 框架或自定义样式完成。以下是几种常见方法: 使用 CSS Flexbox 或 Grid 通过 Vue 单文件组件结合…

vue实现ssr

vue实现ssr

Vue 实现 SSR(服务端渲染) Vue 的服务端渲染(SSR)允许在服务器端生成完整的 HTML 内容,再发送到客户端,提升首屏加载速度和 SEO 友好性。以下是实现 Vue SSR 的关键步骤和…