当前位置:首页 > VUE

vue如何实现vmodel

2026-03-09 08:30:27VUE

Vue 中实现 v-model 的方法

v-model 是 Vue 提供的语法糖,用于在表单元素或组件上实现双向数据绑定。以下是具体实现方式:

在表单元素上使用 v-model

对于原生表单元素(如 input、textarea、select),v-model 会自动绑定 value 属性并监听 input 事件:

<input v-model="message" placeholder="edit me">
<p>Message is: {{ message }}</p>

在自定义组件上实现 v-model

在自定义组件中实现 v-model 需要显式定义 value prop 和 input 事件:

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

使用方式与原生元素相同:

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

Vue 2.x 的 model 选项

在 Vue 2.x 中,可以通过 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.x 的 v-model 更新

Vue 3.x 对 v-model 进行了改进,支持多个 v-model 绑定:

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

使用带参数的 v-model:

<custom-component v-model:title="pageTitle"></custom-component>

处理修饰符

可以处理 v-model 修饰符,如 .trim、.number:

vue如何实现vmodel

props: {
  modelValue: String,
  modelModifiers: {
    default: () => ({})
  }
},
methods: {
  emitValue(e) {
    let value = e.target.value
    if (this.modelModifiers.trim) {
      value = value.trim()
    }
    this.$emit('update:modelValue', value)
  }
}

通过以上方法,可以在 Vue 中灵活实现各种 v-model 绑定场景。

标签: 如何实现vue
分享给朋友:

相关文章

vue实现用户信息表

vue实现用户信息表

Vue 实现用户信息表的方法 使用 Vue CLI 创建项目 安装 Vue CLI 并初始化项目: npm install -g @vue/cli vue create user-info-tabl…

vue   实现单选

vue 实现单选

Vue 实现单选功能 在 Vue 中实现单选功能可以通过多种方式,以下是几种常见的方法: 使用原生 <input type="radio"> 绑定 v-model 通过 v-model…

vue实现贴图

vue实现贴图

Vue 实现贴图功能 在Vue中实现贴图功能通常涉及将图片动态添加到指定位置或元素上。以下是几种常见实现方式: 使用v-bind动态绑定图片 通过数据驱动的方式动态更换图片源: <templ…

vue权限实现

vue权限实现

Vue 权限实现方案 基于路由的权限控制 通过路由守卫实现权限验证,在路由配置中添加meta字段标记权限要求。在router.beforeEach中检查用户权限与路由要求的匹配情况。 // rout…

vue实现波形

vue实现波形

实现波形效果的方法 在Vue中实现波形效果可以通过多种方式完成,常见的方法包括使用Canvas绘制、CSS动画或第三方库。以下是几种实现方案: 使用Canvas绘制波形 通过Canvas API动态…

vue实现groupbox

vue实现groupbox

Vue 实现 GroupBox 组件 在 Vue 中实现类似 GroupBox 的效果可以通过自定义组件完成。GroupBox 通常是一个带有标题的边框容器,用于将相关控件分组显示。 基本实现方法…