首页 > 其他分享 >vue3/provider 和 inject实现跨组件动态数据传递。

vue3/provider 和 inject实现跨组件动态数据传递。

时间:2024-09-14 09:22:41浏览次数:12  
标签:count vue provide vue3 传递数据 inject provider 组件

实现跨层传递

在Vue中,providerinject 是一种用于实现依赖注入的高级特性,允许一个祖先组件向其所有子孙组件注入一个依赖,而不论组件层次有多深,并在起上下游关系成立的时间里始终生效。这在某些场景下非常有用,比如当你需要跨多个组件层级传递数据时。

定义provide对象:在父组件中,你需要定义一个对象,这个对象包含你想要提供给子组件的数据或方法。

使用provide选项:在父组件的provide选项中返回这个对象。

在子组件中使用inject:在需要接收数据的子组件中,使用inject选项来接收来自父组件的数据

父组件:使用provide来向下层传递数据

<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++;
  }

</script>

<template>
    <contentVue></contentVue>
    <button @click="setCount">{{ count }}</button>

</template>

<style scoped>

</style>

 中间层:被数据跨越的层。

<script setup>
import DOWEN from './dowen.vue';
</script>
<template>
    <div>
        中间层组件
        <DOWEN></DOWEN>
    </div>
</template>

最底层:接收数据

<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>

效果图

而且点击按键数组增加,这个跨层传递的数据是动态的。

标签:count,vue,provide,vue3,传递数据,inject,provider,组件
From: https://blog.csdn.net/ededabo/article/details/142237169

相关文章

  • vue3API /watch
    1.watch侦听在Vue3中,watch是一个用于观察和响应Vue实例上的数据变动的函数。它可以用来观察几乎所有类型的数据,包括ref、reactive、响应式对象的属性,甚至是计算属性。当被观察的数据变化时,watch会触发一个回调函数。<scriptsetup>import{ref,watch}from'vue......
  • 从零开始一步一步搭建 Vue3 + Webpack5 项目脚手架指南
    **......
  • 尤雨溪推荐的拖拽插件,支持Vue2/Vue3 VueDraggablePlus
    大家好,我是「前端实验室」爱分享的了不起~今天在网上看到尤雨溪推荐的这款拖拽组件,试了一下非常不错,这里推荐给大家。说到拖拽工具库,非大名鼎鼎的的Sortablejs莫属。它是前端领域比较知名的,且功能强大的工具。但我们直接使用Sortablejs的情况很少,一般都是使用基于它的......
  • vue3 tsx中使用hook
    代码使用方组件import{defineComponent,PropType,h,computed,ref,watch}from'vue';importuseMyHooksfrom'./hooks/useMyHooks';exportdefaultdefineComponent({setup(props,{slots}){const{count,increment,decrem......
  • vue3 el-message组件封装
    背景在封装请求拦截器时,使用ElMessage进行弹窗提示成功或失败,但是如果页面用到多个接口,这时就会导致页面出现很多弹窗,导致用户体验不好,有可能出现卡顿现象。这时就需要进行一些判断,如果前面的ElMessage还没关闭并且类型是一致的就return,不再弹窗提示,类型不一致时就要弹窗提示......
  • 标准的vue3 elementplus格式,不用export default
    <template><div><!--查询表单--><el-form:inline="true":model="filters"class="demo-form-inline"><el-form-itemlabel="产品料号"><el-inputv-model="filters.......
  • uni-app vue3获取 小程序胶囊最新的方法
    1.第一步app.vue<scriptsetup> import{onLaunch}from'@dcloudio/uni-app'; onLaunch(()=>{ //获取胶囊按钮的位置 constbuttonPositon=uni.getStorageSync('buttonPositon') if(!buttonPositon){ constres=uni.getMenuButtonBoun......
  • VUE框架Vue3组件传送实现模态窗口切换------VUE框架
    <template><divclass="s1"><h1>我是App组件</h1><YeYe></YeYe></div></template><script>importYeYefrom"./components/YeYe.vue";exportdefault{name......
  • vue3 + vite 使用 vite-plugin-svg-icons 插件显示本地 svg 图标的方法
    1.安装vite-plugin-svg-icons插件yarnaddvite-plugin-svg-icons-D//或者npminstallvite-plugin-svg-icons-D//或者pnpminstallvite-plugin-svg-icons-D2.使用vite-plugin-svg-icons插件2.1在项目根目录查找vite.config.js,进行配置import{createS......
  • vue3在引入组件时报'has no default export'
    原文:https://blog.csdn.net/weixin_53042678/article/details/138254610这个虽然不影响程序的运行,但是有强迫症患者觉得爆红难受,报错如下: 这个解决的方法也很简单,点击Vscode左下角的设置  添加 "vetur.validation.script":false,重启Vscode即可生效  ......