Vue3全局组件通信之provide / inject详解

当我们开发Vue3应用时,有时候会需要在多个组件之间进行数据传递,这时候就需要用到全局组件通信。Vue3中提供了两种方式进行全局组件通信,一种是provide / inject,另一种是Vuex状态管理,本文主要介绍前者。

一、provide / inject说明

provide / inject是Vue3中提供的API,用于在父组件中提供数据,然后在子组件中进行注入,以达到共享数据的目的。它们的使用分别如下:

// 在父组件中 provide 对象
const app = createApp({
  data() {
    return {
      message: "hello world"
    }
  },
  provide: {
    message: this.message
  },
  ...
})

// 在子组件中 inject 对象
const appChild = {
  inject: ['message'],
  ...
}

二、provide / inject用法示例

示例一: 父组件向子组件传递数据

<!-- 父组件 -->
<template>
  <div>
    <h2> Parent Component </h2>
    <hr>
    <p>Message from parent: {{ message }} </p>
    <hr>
    <ChildComponent></ChildComponent>
  </div>
</template>

<script>
  import ChildComponent from './ChildComponent.vue'
  export default {
    components: {
      ChildComponent
    },
    provide() {
      return {
        message: "Hello from parent component"
      }
    }
  }
</script>

<!-- 子组件 -->
<template>
  <div>
    <h2> Child Component </h2>
    <hr>
    <p>Message from parent: {{ message }}</p>
    <hr>
  </div>
</template>

<script>
  export default {
    inject: ['message']
  }
</script>

在这个示例中,父组件提供了一个名为message的数据,然后在子组件中通过inject获取到该数据。这样子组件就可以使用父组件提供的数据,而不需要使用props进行传递。

示例二: 子组件可以修改父组件数据

<!-- 父组件 -->
<template>
  <div>
    <h2> Parent Component </h2>
    <hr>
    <p>Message from parent: {{ message }} </p>
    <button @click="onClick"> Change Message in Child Component </button>
    <hr>
    <ChildComponent></ChildComponent>
  </div>
</template>

<script>
  import ChildComponent from './ChildComponent.vue'
  export default {
    components: {
      ChildComponent
    },
    data() {
      return {
        message: "Hello from parent component"
      }
    },
    provide() {
      return {
        message: this.message,
        showMessage: this.showMessage
      }
    },
    methods: {
      showMessage(msg) {
        this.message = msg
      },
      onClick() {
        this.showMessage("The message has been changed by child component")
      }
    }
  }
</script>

<!-- 子组件 -->
<template>
  <div>
    <h2> Child Component </h2>
    <hr>
    <button @click="onClick">
      Change message in parent component
    </button>
  </div>
</template>

<script>
  export default {
    inject: ['message', 'showMessage'],
    methods: {
      onClick() {
        this.showMessage("The message has been changed by child component")
      }
    }
  }
</script>

在这个示例中,父组件中提供了一个名为showMessage的方法,该方法可以用来修改父组件中的message数据,子组件通过inject获取到该方法,然后可以在点击按钮时,调用该方法修改父组件的message数据。通过这样的方式,子组件就可以更新父组件中的数据,实现了组件之间的互动。

以上就是本文对于“Vue3全局组件通信之provide / inject详解”的完整攻略,如果您在Vue3开发中需要实现全局组件通信,可以参考此文提供的方法进行开发。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue3全局组件通信之provide / inject详解 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 详解vue文件中使用echarts.js的两种方式

    当我们需要在Vue项目中使用Echarts.js可视化库时,通常有两种方式可以实现,分别是直接引入Echarts.js文件和通过Vue-Echarts插件引入。 直接引入Echarts.js文件 步骤一: 在 Vue 项目中安装 Echarts 在项目根目录中使用 npm 安装 Echarts.js npm install echarts –save 步骤…

    Vue 2023年5月28日
    00
  • vue在html标签{{}}中调用函数的方法总结及对比

    下面是详细讲解“vue在html标签{{}}中调用函数的方法总结及对比”的完整攻略。 问题描述 在vue中,我们可以使用{{}}这样的语法来渲染数据到HTML标签中。但是如果我们需要在渲染的时候执行一些函数,该怎么处理呢?比如,如果我们有一个计算方法,需要将结果插入到HTML标签中,应该怎么做呢? 解决方案 方法一:使用计算属性 在vue中,我们可以使用计算…

    Vue 2023年5月28日
    00
  • Vue数据驱动模拟实现2

    下面我将详细讲解“Vue数据驱动模拟实现2”的完整攻略。 什么是Vue数据驱动模拟实现2 Vue数据驱动模拟实现2是模拟Vue框架的数据响应式原理,实现双向数据绑定的简化版。其核心原理是依赖收集和观察者模式。 实现步骤 实现一个Observer(观察者)对象,用于劫持变化和依赖收集。 function Observer(data) { this.data =…

    Vue 2023年5月28日
    00
  • vue项目中的支付功能实现(微信支付和支付宝支付)

    下面是关于Vue项目中实现微信支付和支付宝支付的完整攻略。 简介 在Vue项目中需要实现支付功能,常见的方式有微信支付和支付宝支付。微信支付目前还需要申请微信支付商户号,而支付宝支付可以使用支付宝开放平台提供的接口实现。 在项目中可以将支付功能实现为一个组件,以便在需要支付的地方引入使用。 微信支付 微信支付需要完成以下步骤: 申请微信支付商户号; 在项目中…

    Vue 2023年5月27日
    00
  • vue实现两列水平时间轴的示例代码

    下面是实现“vue实现两列水平时间轴”的完整攻略: 1. 确定页面结构 首先,需要确定页面的结构和布局。在这个示例中,我们需要两列水平时间轴,因此我们可以使用一个flexbox来实现。 <div class="timeline-container"> <div class="timeline-column&qu…

    Vue 2023年5月29日
    00
  • Vue2异步更新及nextTick原理详解

    Vue2异步更新及nextTick原理详解 前言 Vue.js是一个渐进式JavaScript框架,它采用MVVM模式,架构清晰,可以快速实现前端页面开发。在Vue的生命周期中,我们经常会遇到异步更新的情况,为了更好地了解Vue的异步更新机制,本文将详细讲解Vue2的异步更新及nextTick原理,并附带多个示例。 Vue的异步更新 在Vue组件中,当数据发…

    Vue 2023年5月28日
    00
  • vue 代码高亮插件全面对比测评

    下面是“vue 代码高亮插件全面对比测评”的完整攻略: 需求与介绍 本次测评旨在比较十字架(@kazupon/vue-i18n、vue-i18n、i18next)三种Vue国际化插件的优缺点。 插件介绍 @kazupon/vue-i18n @kazupon/vue-i18n 是一个基于 Vue.js 的双向绑定的国际化插件,是 vue-i18n 的作者 ka…

    Vue 2023年5月27日
    00
  • Vue 实现双向绑定的四种方法

    当我们用Vue框架去编写一个前端应用时,往往需要实现双向绑定,这是Vue框架最重要的特性之一。Vue实现双向绑定的方式有很多,下面将详细讲解四种方法的具体实现过程和示例。 1. Object.defineProperty Object.defineProperty是一种实现双向绑定的最基础的方法,这种方法适用于所有支持ECMAScript5的浏览器。 实现双…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部