当前位置:首页 > 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 实现单页面应用(SPA) Vue.js 是一个渐进式框架,非常适合构建单页面应用(SPA)。SPA 的核心特点是整个应用只有一个 HTML 页面,通过动态加载内容实现页面切换,无需重新加载整个…

vue实现自动翻译

vue实现自动翻译

Vue 实现自动翻译的方法 在 Vue 项目中实现自动翻译功能可以通过多种方式完成,以下是几种常见的方法: 使用第三方翻译 API 注册并获取翻译 API 的密钥(如 Google Translat…

vue实现路由导航

vue实现路由导航

路由导航的实现方式 在Vue中,路由导航主要通过Vue Router实现。Vue Router是Vue.js官方的路由管理器,用于构建单页面应用(SPA)。 基本路由配置 安装Vue Router后…

vue实现购物按钮

vue实现购物按钮

Vue 购物按钮实现方法 基础按钮实现 使用 Vue 的模板语法创建基础按钮组件,绑定点击事件处理购物逻辑: <template> <button @click="addTo…

vue实现横向导航

vue实现横向导航

vue实现横向导航的方法 使用Flex布局实现横向导航 在Vue中可以通过Flex布局快速实现横向导航。创建一个组件,使用display: flex和flex-direction: row属性使导航项…

vue弹幕实现不重叠

vue弹幕实现不重叠

实现 Vue 弹幕不重叠的方法 CSS 定位与动画控制 通过绝对定位和动态计算弹幕轨道高度,确保弹幕在不同轨道上运行。每条弹幕占据固定高度的轨道,避免重叠。 // 弹幕轨道高度计算 const tr…