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

vue v model的实现

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

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

标签: vuemodel
分享给朋友:

相关文章

vue实现用户信息删除

vue实现用户信息删除

Vue 实现用户信息删除功能 在 Vue 中实现用户信息删除功能通常涉及前端界面交互和后端 API 调用。以下是实现步骤: 前端界面设计 创建删除按钮或操作项,通常使用 @click 事件触发删除操…

vue实现报表

vue实现报表

vue实现报表的方法 使用Vue实现报表通常需要结合图表库或表格组件。以下是几种常见方法: 使用ECharts 安装ECharts库: npm install echarts vue-echart…

vue实现高亮

vue实现高亮

Vue 实现文本高亮的方法 在 Vue 中实现文本高亮可以通过多种方式完成,以下是几种常见的方法: 方法一:使用 v-html 指令 通过 v-html 指令可以动态插入 HTML 内容,将需要高…

vue 实现递归

vue 实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据,例如菜单、评论列表或文件目录。以下是实现递归组件的关键步骤: 定义递归组件 递归组件需要设置 name 属性,以便在模…

computed vue 实现

computed vue 实现

computed 在 Vue 中的基本用法 Vue 的 computed 属性用于声明依赖于其他数据的计算属性。当依赖的数据变化时,计算属性会自动重新计算并缓存结果。 export defaul…

vue实现频道

vue实现频道

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