当前位置:首页 > VUE

vue组件实现vmodel

2026-01-16 04:55:26VUE

Vue 组件实现 v-model

在 Vue 中,v-model 是双向数据绑定的语法糖,默认情况下绑定 value 属性并监听 input 事件。在自定义组件中实现 v-model 需要正确配置 propsemit

基本实现方式

  1. 定义 model 选项
    在组件内通过 model 选项指定 propevent

    export default {
      model: {
        prop: 'value', // 绑定的 prop 名
        event: 'input' // 触发的事件名
      },
      props: {
        value: String // 接收父组件传递的值
      },
      methods: {
        updateValue(newValue) {
          this.$emit('input', newValue); // 触发事件更新父组件数据
        }
      }
    }
  2. 在父组件中使用 v-model

    <template>
      <CustomInput v-model="message" />
    </template>

Vue 2.x 的替代方案

如果未显式定义 model 选项,默认使用 value 属性和 input 事件:

export default {
  props: ['value'],
  methods: {
    handleChange(e) {
      this.$emit('input', e.target.value);
    }
  }
}

Vue 3 的 v-model 实现

Vue 3 中 v-model 默认绑定 modelValue 并监听 update:modelValue 事件:

  1. 子组件定义

    export default {
      props: ['modelValue'],
      emits: ['update:modelValue'],
      methods: {
        updateValue(value) {
          this.$emit('update:modelValue', value);
        }
      }
    }
  2. 父组件使用

    <template>
      <CustomInput v-model="message" />
    </template>

支持多个 v-model 绑定(Vue 3)

Vue 3 允许为同一个组件绑定多个 v-model

<template>
  <UserForm 
    v-model:username="user.name" 
    v-model:age="user.age" 
  />
</template>

子组件需分别定义对应的 propsemits

export default {
  props: ['username', 'age'],
  emits: ['update:username', 'update:age'],
  methods: {
    updateUsername(val) {
      this.$emit('update:username', val);
    },
    updateAge(val) {
      this.$emit('update:age', val);
    }
  }
}

使用计算属性优化

对于表单控件,可以通过计算属性简化逻辑:

export default {
  props: ['modelValue'],
  emits: ['update:modelValue'],
  computed: {
    value: {
      get() {
        return this.modelValue;
      },
      set(value) {
        this.$emit('update:modelValue', value);
      }
    }
  }
}

总结

  • Vue 2:默认基于 valueinput,可通过 model 选项自定义。
  • Vue 3:默认基于 modelValueupdate:modelValue,支持多 v-model
  • 通过 props 接收数据,通过 $emit 触发事件实现双向绑定。

vue组件实现vmodel

标签: 组件vue
分享给朋友:

相关文章

vue如何实现到期提醒

vue如何实现到期提醒

实现 Vue 到期提醒功能 使用计算属性计算剩余时间 在 Vue 组件中定义一个计算属性,计算目标日期与当前日期的差值。通过 Date 对象获取时间戳并计算剩余天数或小时数。 computed: {…

vue实现贴图

vue实现贴图

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

vue 实现回复

vue 实现回复

Vue 实现回复功能 在 Vue 中实现回复功能通常涉及表单提交、数据绑定和列表渲染。以下是实现步骤和代码示例: 数据绑定与表单 <template> <div>…

vue 实现打印

vue 实现打印

Vue 实现打印功能的方法 在Vue项目中实现打印功能,可以通过以下几种方式实现: 使用window.print()方法 通过调用浏览器的原生打印API实现基础打印功能,适用于简单内容打印。…

vue observer实现

vue observer实现

Vue Observer 实现原理 Vue 的响应式系统核心是通过 Object.defineProperty(Vue 2)或 Proxy(Vue 3)实现的 Observer 模式。以下是关键实现细…

vue拖拽实现

vue拖拽实现

Vue 拖拽实现方法 使用 HTML5 原生拖拽 API HTML5 提供了原生拖拽 API,可以通过 draggable 属性、dragstart、dragend、dragover 和 drop 事…