当前位置:首页 > VUE

vue组件实现vmodel

2026-03-08 18:18:38VUE

Vue 组件实现 v-model

在 Vue 中,v-model 是双向数据绑定的语法糖,默认用于表单元素。自定义组件也可以通过实现 v-model 来支持双向绑定。以下是实现方法:

默认实现方式(Vue 2 和 Vue 3 兼容)

Vue 的 v-model 默认会利用 value 属性和 input 事件实现双向绑定。

子组件代码:

<template>
  <input
    :value="value"
    @input="$emit('input', $event.target.value)"
  />
</template>

<script>
export default {
  props: ['value']
}
</script>

父组件使用:

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

Vue 3 的 v-model 改进

Vue 3 中 v-model 默认使用 modelValue 属性和 update:modelValue 事件,支持多个 v-model 绑定。

子组件代码:

vue组件实现vmodel

<template>
  <input
    :value="modelValue"
    @input="$emit('update:modelValue', $event.target.value)"
  />
</template>

<script>
export default {
  props: ['modelValue'],
  emits: ['update:modelValue']
}
</script>

父组件使用:

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

自定义 v-model 参数

Vue 3 允许为 v-model 指定参数,实现多个双向绑定。

子组件代码:

vue组件实现vmodel

<template>
  <input
    :value="title"
    @input="$emit('update:title', $event.target.value)"
  />
</template>

<script>
export default {
  props: ['title'],
  emits: ['update:title']
}
</script>

父组件使用:

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

处理复杂数据类型的 v-model

对于复杂数据类型(如对象),可以直接传递并更新整个对象。

子组件代码:

<template>
  <input
    :value="modelValue.text"
    @input="$emit('update:modelValue', { ...modelValue, text: $event.target.value })"
  />
</template>

<script>
export default {
  props: ['modelValue'],
  emits: ['update:modelValue']
}
</script>

父组件使用:

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

通过以上方法,可以灵活地在自定义组件中实现 v-model 功能,满足不同场景的需求。

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

相关文章

vue设计与实现下载

vue设计与实现下载

vue设计与实现电子书下载 《Vue.js设计与实现》是一本深入解析Vue.js框架原理的书籍,由霍春阳(HcySunYang)撰写。以下是获取该资源的常见途径: 正版购买渠道 京东、…

vue实现微博发布动态

vue实现微博发布动态

使用Vue实现微博发布动态功能 创建Vue组件结构 新建一个WeiboPost.vue组件,包含文本框、图片上传和发布按钮: <template> <div class="we…

vue实现treeview

vue实现treeview

Vue 实现 TreeView 的方法 使用递归组件实现 TreeView 递归组件是 Vue 中实现 TreeView 的常见方式。通过组件调用自身,可以轻松处理嵌套的树形结构数据。 <te…

vue实现甘特图

vue实现甘特图

使用 Vue 实现甘特图 基于开源库(如 vue-ganttastic) 安装依赖库: npm install vue-ganttastic 示例代码: <template> &l…

vue实现座位

vue实现座位

Vue实现座位布局 使用Vue实现座位布局可以通过组件化和响应式数据管理来简化开发流程。以下是一个完整的实现方案: 数据准备 定义座位数据结构,通常使用二维数组表示行列关系: data() {…

vue实现tooltips

vue实现tooltips

Vue 实现 Tooltips 的方法 使用原生 HTML title 属性 在 Vue 模板中直接使用 HTML 原生 title 属性实现简单的提示效果。这种方式无需额外依赖,但功能较为基础,无法…