vue 提供注入 provideinject 深层嵌套通信

Posted 奥特曼 

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue 提供注入 provideinject 深层嵌套通信相关的知识,希望对你有一定的参考价值。

一、概述

我们用父子传递的时候可能会想到用props传递,但是有时候组件嵌套比较深 可能会出现 祖孙 组件的传递,在vue3.0中是没有事件总线的(eventBus),我们就可以通过提供注入的方式进行传递数据,提供注入 vue2.0和vue3.0都可以使用

使用步骤

1. 祖先组件 引入 provide  子孙组件中引入 inject

2. 祖先组件中提供数据 provide('数据名',数据)

3. 后代组件中接收数据 inject('数据名')

 二、祖先组件传递数据给子孙数据

祖先组件

<template>
  <div>
    祖组件 {{msg}}
    <Father></Father>
  </div>
</template>

<script>
import { provide,ref } from "vue";
import Father from "./father.vue";
export default {
  components: {
    Father,
  },
  setup() {
    const msg = ref("奥特曼");
    const editMsg=()=>{
        msg.value+='打怪兽'
    }
    provide("name", msg);
    provide("editMsg", editMsg);
    return {msg}
  },
};
</script>

父亲组件

<template>
  <div>
    父组件 {{name}}
    <Son></Son>
  </div>
</template>

<script>
import Son from "./son.vue";
import { inject } from "vue";
export default {
  components: {
    Son,
  },
  setup() {
  const name = inject("name");
    return {name}
    
  },
};
</script>

<style scoped>
</style>

子孙组件

<template>
  <div>孙组件 {{name}} </div>
  <button @click="editMsg">修改</button>
</template>

<script>
import { inject } from "vue";
export default {
  name: "son",
  setup() {
    const name = inject("name");
    const editMsg = inject("editMsg");
    return {name,editMsg}
  },

};
</script>

在 子孙组件中 通过inject 获取了 祖先级组件的 数据,我们在子孙组件中修改祖先级的组件的时候,要在祖先组件中定义一个方法进行修改,不要直接在子孙组件中直接修改。

  • 祖先组件中提供数据&操作数据的函数fprovide('函数f', 数据名)

  • 后代组件中获取操作数据的函数f,并调用数据: inject('函数f')

以上是关于vue 提供注入 provideinject 深层嵌套通信的主要内容,如果未能解决你的问题,请参考以下文章

vue实现不刷新整个页面刷新数据

vue实现不刷新整个页面刷新数据

深层理解Spring 控制反转和依赖注入,这一篇文够了

如何使用 nuxt 和 @vue/composition-api 提供/注入 Vue 根实例?

如何提供从 vue 功能组件传递的注入

Vue 3 Composition API 提供/注入在单个文件组件中不起作用