vue3-跨层数据传递案例

当多个组件嵌套时就不单单是父子之间的传递了,以下是三层组件的嵌套案例

用到的工具:provide,inject

底层组件案例:

<script setup>
import { inject } from 'vue';
const vueData=inject("data-key")
const count=inject("count-key")

</script>
<template>
    <div>当层文件为底层组件
        <div>
            来自顶层组件的普通数据:{{ vueData }}
        </div>
        <div>
            来自顶层组件的响应数据:{{ count }}
        </div>
      
    </div>
</template>

说明:变量名=inject("key值"),声明前边的变量用于接收顶层传来的数据,数据的key值为括号的引号中的值。

中间层:

<script setup>

import dowen from './dowen.vue'

</script>
<template>
    <div>
        中间层组件
        <dowen></dowen>
   </div>
</template>

说明:import导入底层组件,template元素中使用引用名做标签,实现引用底层内容

顶层:

<script setup>

//跨层数据传递
import { provide,ref } from 'vue';
import contentVue from './content-vue.vue';
provide("data-key","顶层组件的数据")
const count=ref(0)
provide("count-key",count)

</script>
<template>
  顶层组件
  <contentVue></contentVue>
  <button @click="setCount">{{ count }}</button>
  
</template>

说明:import导入我们跨层传递数据的工具provide,和中间层组件。首先使用工具存了一个常量值到data-key对应的值内:provide("data-key","顶层组件的数据")。然后使用ref定义了一个响应式数据count,再将count使用工具存入count-key对应的值内:provide("data-key","顶层组件的数据")。在元素部分引用了中间层标签。在元素部分还设置了一个按钮,用来对响应式数据count进行操作,因为是响应式数据所以底层接收到的值也会发生改变。

页面效果:

单机一次后:

 响应式数据也可以通过底层操作顶层

顶层案例:

<script setup>

//跨层数据传递
import { provide,ref } from 'vue';
import contentVue from './content-vue.vue';
provide("data-key","顶层组件的数据")
const count=ref(0)
provide("count-key",count)
const setCount=()=>{
  count.value++
}
provide("setCount-key",setCount)
</script>
<template>
  顶层组件
  <contentVue></contentVue>
  <button @click="setCount">{{ count }}</button>
 
</template>

说明:只是在原来的基础上在provide工具中存放了setCount函数,key值为setCount-key:provide("setCount-key",setCount),这样底层就可以通过这个key值获取这个函数了

中间层代码不变

底层代码:

<script setup>
import { inject } from 'vue';
const vueData=inject("data-key")
const count=inject("count-key")
const setCount=inject("setCount-key")
</script>
<template>
    <div>当层文件为底层组件
        <div>
            来自顶层组件的普通数据:{{ vueData }}
        </div>
        <div>
            来自顶层组件的响应数据:{{ count }}
        </div>
       <button @click="setCount">
count值加1
       </button>
    </div>
</template>

说明:只是在原来的基础上多了一个接收setCount函数的代码和触发该函数的按钮,这样就可以实现底层对顶层的响应式数据操作

页面效果:

单机一次底层按钮(count值加1)后:

 自加只是底层对顶层响应式数据的操作的一种,可以通过这种方式达到自己想达到的业务逻辑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值