vue使用v-model实现父子组件传值之子父组件同步更新方式

 更新时间:2026年05月19日 09:53:17   作者:冰凉小脚  
文章主要介绍了Vue2和Vue3中父子组件间通过props和emit实现双向绑定的方法,Vue2中,子组件通过props接收值,通过$emit触发change事件修改父组件数据;Vue3中方法类似,但语法略有不同

基于vue2和vue3两个版本的框架略显不同,所以我分开的来讲:

1、vue2

子组件(my-input.vue):

<template>
    <input type="text" :value="name" @input="inputChange" />
</template>

<script>
export default {
    model: {
        prop: 'name',
        event: 'change'
    },
    props: {
        name: {
            type: String,
            default: ''
        }
    },
    methods: {
        inputChange(e) {
            this.$emit('change', e.target.value)
        }
    },
}
</script>

父组件:

<template>
    <my-input v-model="name" />
</template>

<script>
import MyInput from './my-input.vue'
export default {
    data() {
        return {
            name: '张三'
        }
    },
}
</script>

子组件:

  1. 使用model的name和event来指定变量名和修改事件名;
  2. 通过props接收一个值(举例name),
  3. 通过this.$emit执行change事件进行对数据进行修改,实现数据双向绑定功能;

父组件:组件直接使用 v-model绑定变量即可

2、vue3

子组件:

<template>
    <input :value="modelValue" @input="updateValue" />
</template>

<script setup>
import { defineProps, defineEmits } from 'vue'

const props = defineProps({
    modelValue: {
        type: String,
        required: true
    }
})
const emits = defineEmits(['update:modelValue'])

const updateValue = (event) => {
    emits('update:modelValue', event.target.value)
}
</script>

父组件:

<template>
    <div>
        <my-input type="text" v-model="name" />
    </div>
</template>

<script setup>
import MyInput from './my-input.vue'
let name = ref('')
</script>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Vue中如何合并el-table第一列相同数据

    Vue中如何合并el-table第一列相同数据

    这篇文章主要介绍了Vue中如何合并el-table第一列相同数据问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Vue日期时间选择器组件使用方法详解

    Vue日期时间选择器组件使用方法详解

    这篇文章主要为大家详细介绍了Vue日期时间选择器组件的使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • 深入了解vue-router原理并实现一个小demo

    深入了解vue-router原理并实现一个小demo

    这篇文章主要为大家详细介绍了vue-router原理并实现一个小demo,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • Vue实现简单基础的图片裁剪功能

    Vue实现简单基础的图片裁剪功能

    这篇文章主要为大家详细介绍了如何利用Vue2实现简单基础的图片裁剪功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-09-09
  • 使用Vue手写一个对话框

    使用Vue手写一个对话框

    相信大家之前都写过一些组件,尤其是这样的弹窗组件,这篇文章主要来和大家聊聊如何使用Vue手写一个对话框,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-04-04
  • Vue如何下载本地静态资源static文件夹

    Vue如何下载本地静态资源static文件夹

    这篇文章主要介绍了Vue如何下载本地静态资源static文件夹,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • web面试vue自定义组件及调用方式

    web面试vue自定义组件及调用方式

    这篇文章主要介绍了web面试中常问到的关于vue自定义组件及调用方式,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-09-09
  • 解决vue+router路由跳转不起作用的一项原因

    解决vue+router路由跳转不起作用的一项原因

    这篇文章主要介绍了解决vue+router路由跳转不起作用的一项原因,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • Nuxt pages下不同的页面对应layout下的页面布局操作

    Nuxt pages下不同的页面对应layout下的页面布局操作

    这篇文章主要介绍了Nuxt pages下不同的页面对应layout下的页面布局操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Vue+tracking.js 实现前端人脸检测功能

    Vue+tracking.js 实现前端人脸检测功能

    这篇文章主要介绍了Vue+tracking.js 实现前端人脸检测功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04

最新评论