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

yizhihongxing

当我们开发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日

相关文章

  • Springboot vue导出功能实现代码

    那我为您详细讲解一下“Springboot vue导出功能实现代码”的完整攻略。 1. 环境准备 首先需要准备好以下环境: JDK 8+ Maven 3+ Vue.js 2+ Element-UI 2+ axios 0.19+ 2. 前端实现 在前端页面中,我们需要添加一个导出按钮,当用户点击该按钮时,触发导出操作。 <el-button type=&…

    Vue 2023年5月27日
    00
  • 详解spring cloud ouath2中的资源服务器

    下面是“详解Spring Cloud OAuth2中的资源服务器”的攻略: 1. 背景 在微服务架构中,通常需要一个安全的方式来处理跨服务之间的数据交换。OAuth2是最常见的安全授权标准之一,Spring Cloud OAuth2是一个基于Spring Boot的OAuth2开发框架,提供了非常便捷的使用方式。 本文将详细介绍如何搭建一个Spring Cl…

    Vue 2023年5月28日
    00
  • vue实现留言板todolist功能

    下面我将为您提供详细的“vue实现留言板todolist功能”的完整攻略。 确定用户需求和页面结构 在开始开发之前,我们需要先确定用户的需求和页面结构。在这个例子中,我们假设用户需要有一个留言板和一个todolist功能。我们可以基于这个需求来确定页面结构,一般来说,可以使用下面的结构。 <template> <div> <!-…

    Vue 2023年5月28日
    00
  • vue如何修改data中数据问题

    要修改Vue中的数据,可以通过两种方法:使用Vue提供的方法或直接修改data中的数据。以下是详细的攻略: 使用Vue提供的方法修改数据 Vue提供了许多可以修改data中数据的方法,常用的有以下几种: $set $set方法可以动态地向Vue实例添加一个响应式属性,用法如下: this.$set(this.data, ‘newValue’, ‘这是新的值’…

    Vue 2023年5月28日
    00
  • vue源码学习之Object.defineProperty对象属性监听

    下面我来详细讲解“vue源码学习之Object.defineProperty对象属性监听”的完整攻略。 标题 vue源码学习之Object.defineProperty对象属性监听 简介 在开发Vue.js过程中,我们经常会用到Object.defineProperty方法来实现数据响应式,也就是监听对象属性的变化。Vue.js源码中就使用了该方法来实现数据…

    Vue 2023年5月28日
    00
  • 在vue项目中,将juery设置为全局变量的方法

    在Vue项目中,使用jQuery需要将其设置为全局变量,下面是完整的攻略: 安装jQuery 首先,需要在项目中安装jQuery,可以使用npm或yarn进行安装。这里以npm为例: npm install jquery –save-dev 引入jQuery并设置为全局变量 在Vue项目的入口文件中(一般是main.js),需要引入jQuery并将其设置为…

    Vue 2023年5月28日
    00
  • Vue编译器解析compile源码解析

    Vue编译器是一个非常重要的组成部分,它的作用是将Vue组件中的template模板转化为渲染函数,以实现组件的动态渲染。本篇攻略将详细介绍Vue编译器解析compile源码的过程。 什么是compile源码? compile源码是Vue编译器的一部分,它是Vue的编译过程的核心部分。该部分主要负责将Vue组件的模板转化为渲染函数。 compile源码执行过…

    Vue 2023年5月27日
    00
  • Vue分页器实现原理详解

    首先让我们来了解什么是分页器以及为什么要使用它。分页器通常用于长列表数据(比如搜索结果、文章列表等)的分页展示,它将这些数据分割成多个页面,每页呈现一定数量的内容。当用户需要查看其他页面时,分页器可以快速地进行切换。 Vue分页器的实现原理基于Vue组件化开发思想。实现分页器的过程中,我们需要创建一个Vue组件。在组件的data对象中,我们需要定义一个ite…

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