vue3探索——组件通信之v-model父子组件数据同步

这篇具有很好参考价值的文章主要介绍了vue3探索——组件通信之v-model父子组件数据同步。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

再很多场景中,我们可能想在子组件中修改父组件的数据,但事实上,vue不推荐我们这么做,因为数据的修改不容易溯源。

Vue2写法

在vue2中,我们使用.sync修饰符+自定义事件'update:xxx',来使父子组件数据同步。

// 父组件
<template>
    <div>
        <h2>我是父组件,我有{{ money }}¥</h2>
        <hr>
				<!-- 这里使用.sync修饰符,使**子组件pmoney**与**父组件money**同步 -->
        <Son :pmoney.sync="money" />
    </div>
</template>

<script>
import Son from "./son.vue";
export default {
    components: {
        Son,
    },
    data() {
        return {
            money: 1000 // 父组件数据
        };
    },
};
</script>
// 子组件
<template>
    <div>
        <h2>我是子组件,我爹有{{ pmoney }}¥</h2>
				<!-- 触发**update:pmoney**这个自定义事件,事件参数就是要更改的值 -->
        <button @click="$emit('update:pmoney', pmoney - 100)">用了100¥</button>
    </div>
</template>

<script>
export default {
    props: {
				// 定义父组件传进来的数据
        pmoney: {
            type: Number,
            default: 0
        },
    },
};
</script>

这里不作过多说明,有需要请自行了解。

Vue3写法

vue3的写法与vue2基本一致。最大的区别就是,使用v-model代替.sync修饰符

// 父组件
<template>
    <div>
        <!-- 父组件的数据 -->
        <h2>我是父组件,我有{{ money }}¥</h2>
        <hr>
        <!-- 使用子组件 -->
        <!-- 这里v-model的作用相当于vue2的.sync修饰符 -->
        <Son v-model:pmoney="money" />
        <!-- 也可以绑定多组数据 -->
        <!-- <Son v-model:pmoney1="money" v-model:pmoney2="money" /> -->
    </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';

// 引入子组件
import Son from './son.vue';

// 父组件的数据
const money = ref(1000);
</script>
// 子组件
<template>
    <div>
        <!-- 使用props中的数据 -->
        <h3>我是子组件,我爹有{{ pmoney }}¥</h3>
        <!-- 这里通过自定义事件,向父组件传递变更后的值,由父组件监听事件并修改数据 -->
        <button @click="emit('update:pmoney', pmoney - 100)">我使用了100¥</button>
    </div>
</template>

<script setup lang="ts">
// 定义props,接收父组件的数据
defineProps(['pmoney']);

// 定义emits,用于触发父组件的事件
const emit = defineEmits(['update:pmoney']);
</script>

原理剖析

下面的v-model:pmoney实际是v-bind:pmoney 属性绑定和@update:pmoney 事件绑定的语法糖。

这里事件绑定的@update:是固定的,这就是子组件的自定义事件要加update: 前缀的原因

<Son v-model:pmoney="money" />

相当于

<Son :pmoney="money" @update:pmoney="money = $event" />
  • $event:子组件通过自定义事件传给父组件的值。

父子组件数据同步的本质

本质是子组件通过自定义事件向父组件传参数,子组件触发自定义事件并传值,父组件监听自定义事件并取值,同时修改原本的数据,因为v-bind数据绑定,子组件数据也会更新到最新的值。文章来源地址https://www.toymoban.com/news/detail-675076.html

到了这里,关于vue3探索——组件通信之v-model父子组件数据同步的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue项目中对组件使用v-model绑定值,在vue3中如何更新数据

    在el-form 中 el-form-item 绑定组件进行校验 想在表单下面爆红提示 可以对组件使用v-model绑定值 vue2 通过this.$emit(‘input’,value) 更新 v-model值 vue3 通过this.$emit(‘update:modelValue’ ,value) 更新 v-model值

    2024年02月15日
    浏览(41)
  • 组件封装v-model .sync在父子组件中实现双向数据绑定 如何处理单向数据流 封装表单组件

    使用watch监听 父组件使用.sync进行数据的绑定 传值子组件时 把值赋值到data的变量中 然后监听该数据的变化 $emit抛出 父组件demo 子组件 展示效果 使用绑定对象的方式打破单向数据流实现 父组件 子组件 参考vue官方及各插件库的方案 使用计算属性来保证双向数据流 通过计算属

    2023年04月19日
    浏览(32)
  • vue3 子组件实现v-model用法

    在Vue 3中,实现自定义的 input 组件并支持 v-model 绑定,涉及到对 modelValue 这个默认prop的处理和对应的 update:modelValue 事件的触发。Vue 3使得这个过程比Vue 2更为简化和灵活,尤其是在可以自定义绑定的属性和事件名方面。 步骤 1: 创建自定义Input组件 首先,创建一个自定义的I

    2024年04月27日
    浏览(32)
  • 组件v-model(.sync)记录使用(vue3)

    首先,让我们来了解一下Vue3中v-model的用法。在Vue3中, v-model 指令可以用于自定义组件上,用于实现组件的双向数据绑定。与Vue2中的 .sync 不同, Vue3中的v-model需要在组件中手动实现双向绑定逻辑。 下面是一个简单的父组件示例,展示了如何在Vue3中使用 v-model 来实现组件的双

    2024年01月19日
    浏览(31)
  • vue3-父子组件间通信

    在实际业务开发的过程中,我们时常会遇到组件间的通信问题,比如:父子组件间通信、同级组件间通信等。本篇文章中主要介绍父子组件间通信。父子组件间通信主要有以下常见形式: 方案 父组件向子组件 子组件向父组件 props/emits props emits v-model/emits v-model emits ref/emits

    2024年02月05日
    浏览(47)
  • Vue3.2+TS的组件间的v-model传值

    组件之间的v-model,为什么可以v-model,大家可以去看看v-model的原理,然后就会发现这个方法一目了然。 父组件 子组件 假如子组件需要按照某个方法变化,那么可以自己定义,比如需要自增加50

    2024年02月13日
    浏览(36)
  • Vue3-在HTML标签、组件标签上使用v-model

    本篇为Vue3学习中遇到的v-model相关的记录,如有问题欢迎指正 v-model通常在input、select等标签上来实现数据双向绑定 原理 :v-model通过给标签value赋值来实现  数据—页面 的绑定。然后通过绑定input事件实现 页面—数据 的绑定。 原理 :在组件上时,v-model通过 :modelValue 来进行

    2024年01月24日
    浏览(51)
  • VUE3+TS(父子、兄弟组件通信)

    目录 父传子值、方法(子调用父值、方法) 子传父值(父调用子值) 父读子(子传父)(父调用子值、方法) 兄弟(任意组件)通信 引入Mitt来完成任意组件通信 1、统一规范写法,通过在子组件标签上绑定属性和值,来传递到子组件,子组件再通过defineProps来接收,先给其

    2023年04月08日
    浏览(34)
  • 【Vue技巧】Vue2和Vue3组件上使用v-model的实现原理

    ChatGPT4.0国内站点,支持GPT4 Vision 视觉模型:海鲸AI 在Vue中, v-model 是一个语法糖,用于在输入框、选择框等表单元素上创建双向数据绑定。当你在自定义组件中实现 v-model 功能时,你需要理解它背后的原理: v-model 实际上是一个属性和一个事件的简写。 在 Vue 2.x 中, v-mode

    2024年01月15日
    浏览(49)
  • Vue3通信方式之defineProps、defineEmits、useAttrs、插件mitt和v-model

    1、使用defineProps props可以实现父子组件通信,在vue3中我们可以通过defineProps获取父组件传递的数据。且在组件内部不需要引入defineProps方法可以直接使用! 父组件给子组件传递数据 子组件获取父组件传递数据:方式1 子组件获取父组件传递数据:方式2 子组件获取到props数据就可以

    2024年02月11日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包