vue3 父子组件通信

6 篇文章 0 订阅
2 篇文章 0 订阅

老规矩不废话先看效果图

 父组件

<template>
  <div class="about">
    <p>父组件:</p>
    <p> 姓名:{{userInfo.name}}</p>
    <p> 年龄:{{userInfo.age}}</p>
    <p>地址:{{address_phone.address}}</p>
    <p>电话:{{address_phone.phone}}</p>
    <p>子组件:</p>
    <Demo />
  </div>
</template>

<script>
  import { onMounted, reactive, ref, toRefs, provide } from 'vue';
  import Demo from '@/components/demo.vue'
  export default {
    components:{
      Demo
    },
    setup() {
      //父传子start
      const userInfo = ref({//此处相当于定义变量了
        name: 90,
        age: 135
      });
      provide('userInfo', userInfo)//这个很重没有他提供给子组件,是无法在子组件中获取到数据的
      //父传子end
      //父子通信相互改变start
      const address_phone = ref({
        address: '中国', // 地址
        phone: '16666666666', //手机号
      })
      const updateAddressPhone = (event) => {//接收/更新子组件的传值
        address_phone.value = event
      }
      provide('updateAddressPhone', updateAddressPhone)
      //父子通信相互改变end
      onMounted(() => {
        
      });
      return {
        userInfo,//切记定的变量要在此处抛出
        updateAddressPhone,
        address_phone,
      };
    }
  }
</script>

 子组件

<template>
    <div>
        <p>这里是接收父级的参数</p>
        <p> 姓名:{{childUserInfo.name}}</p>
        <p> 年龄:{{childUserInfo.age}}</p>
        <button @click="clickFn">点击更新地址电话</button>
    </div>
</template>

<script>
    import { inject } from 'vue'
    export default {
        name: "demo",
        setup() {
            const childUserInfo = inject('userInfo')//接收父的传值
            const updateAddressPhone = inject('updateAddressPhone')//更新父组件方法
            const clickFn = ()=> {
                updateAddressPhone({
                    address: '中国/河南', // 地址
                    phone: '15555555555', //手机号
                })
            }
            return {
                childUserInfo,
                updateAddressPhone,
                clickFn
            }
        }
    }
</script>

<style scoped>

</style>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值