vue3组合API-依赖注入

provide和inject函数完成后代组件数据通讯

总结

provide函数提供数据给后代组件使用

inject函数给当前组件注入provide提供的数据和函数

父组件

<template>
  <div>
    <div>父组件</div>
    <h1>{{ money }}</h1>
    <button @click="money = 1000">111</button>
    <hr />
    <!-- <Son :money="money" @change-money="updateMoney" /> -->
    <Son v-model:money="money" />
  </div>
</template>

<script>
import { provide, ref } from 'vue'
import Son from './son.vue'
export default {
  name: 'app',
  components: { Son },
  // 父组件的数据传递给子组件
  setup () {
    const money = ref(100)
    //  将数据提供给后代组件 provide
    provide('money', money)
    const changeMoney = (val) => {
      console.log('changeMoney');
      money.value = money.value - val
    }
    // 将函数提供给后代组件 provide
    provide('changeMoney', changeMoney)
    return { money, }
  }
}
</script>

<style>
</style>

孙组件

<template>
  <div>
    <div>孙组件</div>
    <div>{{ money }}</div>
    <button @click="fn">修改</button>
  </div>
</template>

<script>
import { inject, onMounted } from 'vue'
export default {
  name: 'grandSon',
  // 子组件接受父组件数据使用props
  props: {

  },

  setup () {
    // 接受祖先组件提供的数据
    const money = inject('money')
    // 孙组件,消费50 通知父组件app.vue组件,进行修改
    // 不能自己修改数据,遵循单向数据流原则,数据谁定义谁修改
    const changeMoney = inject('changeMoney')
    const fn = () => {
      changeMoney(50)
    }
    return { money, fn }
  }
}
</script>

<style>
</style>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值