Vue 中 provide和inject的使用

 更新时间:2022年08月02日 11:29:15   作者:樱舞  
这篇文章主要介绍了Vue中provide和inject的使用,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下

前言

在Vue中我们可以很方便的通过父组件往子组件传递属性,Props是我们将数据传递到子组件的主要方式之一。例如,下面的代码,我们往子组件(PopularList )传递了属性 name,其值是Most Popular Posts。在PopularList中我们可以通过name访问数据。

<PopularList name="Most Popular Posts" />

但是有时子组件中可以包含子组件,如果我们想将数据从父组件传递到孙子组件,最简单的方法就是使用provide/reject。这种方式的好处是:我们不需要将属性先传给子组件,再传给孙子组件。就像Parent → Child → GrandChild。我们可以简单地将它传递为Parent → Grandchild,

如下图所示:

Vue中如何使用provide和inject

如果你使用的是composition API。可以直接使用provide 方法传递任何形式的数据。

<script setup>
    import { provide } from 'vue'
    provide('myKey', 'message');
</script>

provide函数接收两个参数 - 值和键。上面的例子中,键是mykey,值是message。和props一样,这个是可以是对象,数字或其他任何有效类型的数据。使用ref,我们还可以将这个属性设置为响应式。

<script setup>
    import { provide, ref } from 'vue'
    const message = ref('message');
    provide('myKey', message);
</script>

如果使用的是Options API,则可以使用以下结构在组件中提供数据。

export default {
    provide: {
        myKey: 'message'
    }
}

在 Vue 中使用注入访问父数据

在上面的例子中,我们说明了如何在父组件中传值。我们在孙子组件中,该如何获取到这个值,我们可以使用inject来访问属性。

例如,假设我们有一个如下所示的 Vue 组件:

<script setup>
    import { ref, provide } from 'vue'
    import ChildElement from './Child.vue';
    const message = ref('message');
    provide('myKey', message);
</script>
<template>
    <p>Hello World!</p>
    <ChildElement />
</template>

然后是一个Child.vue看起来像这样的子组件:

<script setup>
    import GrandChildElement from './GrandChildElement.vue';
</script>
<template>
    <GrandChildElement />
</template>

在GrandChildElement中,我们可以访问myKey,因为我们在父级中provide了它。我们可以在 Child.vue中这样做,但我们也可以只使用inject。provide使我们能够从多个级别获取数据。要访问这些数据GrandChildElement,我们使用inject.

我们的GrandChildElement.vue文件可能看起来像这样:

<script setup>
import { inject } from 'vue'
const message = inject('myKey')
</script>

const message这里将返回文本message,因为这是我们设置myKey的provide。如果使用的是 Options API,则可以改为

export default {
    inject: [ 'myKey' ],
    created() {
        // Can access this.myKey here
    }
}

到此这篇关于Vue 中 provide和inject的使用的文章就介绍到这了,更多相关Vue provide和inject 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue嵌套路由的各种用法详解

    Vue嵌套路由的各种用法详解

    在 Vue 中,嵌套路由和 Element Plus 的 Menu 组件是构建复杂单页面应用(SPA)时的常用组合,通过嵌套路由,可以实现多级页面结构,以下是结合 Vue 嵌套路由和 Element Plus Menu 的各种用法和场景的详细介绍,需要的朋友可以参考下
    2025-01-01
  • Vue 实现列表动态添加和删除的两种方法小结

    Vue 实现列表动态添加和删除的两种方法小结

    今天小编就为大家分享一篇Vue 实现列表动态添加和删除的两种方法小结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • 使用vant-uploader上传照片无法删除的解决

    使用vant-uploader上传照片无法删除的解决

    这篇文章主要介绍了使用vant-uploader上传照片无法删除的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • 详解Vue.js iview实现树形权限表(可扩展表)

    详解Vue.js iview实现树形权限表(可扩展表)

    这篇文章主要介绍了详解Vue.js iview实现树形权限表(可扩展表),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • 详解Vue Elememt-UI构建管理后台

    详解Vue Elememt-UI构建管理后台

    本篇文章给大家详细分享了Vue Elememt-UI构建管理后台的过程以及相关代码实例,一起参考学习下。
    2018-02-02
  • Vue3中的常见组件通信之props和自定义事件详解

    Vue3中的常见组件通信之props和自定义事件详解

    这篇文章主要介绍了Vue3中的常见组件通信之props和自定义事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • vue项目动态设置iframe元素高度的操作代码

    vue项目动态设置iframe元素高度的操作代码

    在现代Web开发中,iframe元素常用于嵌入外部内容到当前网页中,比如在线文档、视频播放器或是广告,Vue框架提供了强大的工具来解决这个问题,通过动态设置iframe元素的高度,我们可以确保页面布局既美观又高效,本文给大家介绍了vue项目动态设置iframe元素高度的操作
    2024-10-10
  • vue实现循环切换动画

    vue实现循环切换动画

    这篇文章主要为大家详细介绍了vue实现循环切换动画,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • ant-desigin-vue中form表单的使用解读

    ant-desigin-vue中form表单的使用解读

    这篇文章主要介绍了ant-desigin-vue中form表单的使用解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • vue3中的事件修饰符详解

    vue3中的事件修饰符详解

    Vue3中的事件修饰符包括:.stop(阻止冒泡)、.prevent(阻止默认事件)、.self(阻止自身事件)、.capture(打乱冒泡顺序)、.once(事件只触发一次)和.passive(事件默认行为立即执行),这些修饰符可以帮助开发者更灵活地控制事件的处理方式
    2025-02-02

最新评论