Vue3中的爷爷与祖孙之间的传值

1.父传孙数据:provide

2.子孙得到数据:inject

一.爷爷传孙数据:provide

爷爷组件:

<template>
  <div>我是爷爷组件我有{{ money }}元钱</div>
  <hr />
  <Child></Child>
</template>

<script>
import { ref, provide } from 'vue'
import Child from './Child.vue'
export default {
  name: 'App',
  setup() {
    // 直接把数据传递出去给孙子传
    provide('moneyInfo', 1000)
    const money = ref(2000)
    return { money }
  },
  components: {
    Child
  }
}
</script>

<style></style>

孙组件:使用inject,里面的参数值是爷爷组件传递过来的要保证参数名一致

<template>
  <div>我是孙组件爷爷给了我{{ moneyInfo }}钱</div>
</template>

<script>
// 注入 接到爷爷给的钱
import { inject } from 'vue'
export default {
  name: 'GrandSon',
  setup() {
    const moneyInfo = inject('moneyInfo')

    return { moneyInfo }
  }
}
</script>

<style></style>

父组件:

<template>
  <div>我是父组件{{ money }}</div>
  <hr />
  <grand-son></grand-son>
</template>

<script>
import GrandSon from './grandSon.vue'
export default {
  name: 'Child',
  components: { GrandSon }
}
</script>

<style></style>

二.孙组件向爷爷组件传值:

步骤:

1.爷爷先定义一个空的函数传递给孙子

2.孙子使用inject接收

3.孙子使用按钮等函数中调用爷爷传递过来的函数,()中传递要传递的数据

3.爷爷当初定义的空函数中参数写value,获得的就是孙子传递过来的值

爷爷组件:

<template>
  <div>我是爷爷组件我有{{ money }}元钱</div>
  <hr />
  <Child></Child>
</template>

<script>
import { ref, provide } from 'vue'
import Child from './Child.vue'
export default {
  name: 'App',
  components: {
    Child
  },
  setup() {
    // 直接把数据传递出去给孙子传
    const moneySendGrandson = function(value) {
      console.log('孙子传值给我', value)
    }
    provide('moneySendGrandson', moneySendGrandson)
    const money = ref(2000)
    return { moneySendGrandson, money }
  }
}
</script>

父组件没有变化

孙组件:

<template>
  <div>我是孙组件</div>
  <button @click="sendMoneytoYe">我给爷爷传3000</button>
</template>

<script>
// 注入 接到爷爷给的钱
import { inject } from 'vue'
export default {
  name: 'GrandSon',
  setup() {
    // 接收爷爷的空的函数
    const moneySendGrandson = inject('moneySendGrandson')
    const sendMoneytoYe = function() {
      moneySendGrandson(3000)
    }
    return { sendMoneytoYe }
  }
}
</script>

  • 15
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值