vue2的provide和inject:https://v2.cn.vuejs.org/v2/api/#provide-inject

主要作用:

跨层级传递数据(响应和非相应数据都可以)、方法(函数),顶层可以跨N层传递数据和方法给子孙组件调用。

使用provide和inject可以在不太复杂的场景下,不使用状态管理(vuex、pinia)来解决组件通信问题。

使用provide提供数据,inject接收数据

测试效果:

使用provide提供方法、函数

应用场景:

子组件即便拿到顶层组件的数据,也无法修改,此时就可以使用provide提供方法,将顶层组件的方法传递给任意底层组件,那么底层组件就可以调用顶层组件的方法,从而实现修改顶层组件中的数据。

顶层组件代码:

<script setup>
import SonA from "@/compon/SonA.vue";
import {provide, ref} from "vue"; const money = ref(100)
const money2 = ref(100)
const changeMoney = (newMoney) => {
money.value -= newMoney
}
// 1. 使用provide函数提供提供需要传递的数据
// 注意:provide可以传递普通数据(非响应式),也可以传递响应式数据,
// money是ref函数返回的响应式对象,money.value是其中值(非响应式)
// 当传递响应式对象时,顶层组件的数据改变,下层组件中inject的数据也会改变,否则相反。
provide('money', money)
provide('money2', money2.value) // 虽然money2是响应式数据,但是我传的时候是传.value(非相应),因此money2改变值后,下层的组件不会改变。
// 还可以传递方法
provide('changeMoney', changeMoney)
</script> <template>
<div>
我是父组件
<SonA/>
</div>
</template>

son代码:

<script setup>
import GrandSon from "@/compon/GrandSon.vue";
import {inject} from "vue";
const money = inject('money');
</script> <template>
<div class="SonA">
我是SonA, 爸爸的钱 {{ money }}
<GrandSon></GrandSon>
</div>
</template>

grandSon代码:

<script setup>
import {inject} from "vue"; const money = inject('money');
const money2 = inject('money2'); const changeMoney = inject('changeMoney'); </script> <template>
<div class="grandSon">
我是孙子, 爷爷的钱: {{ money }}
<div>
我是孙子, 爷爷的钱2(非响应式数据): {{ money2 }}
</div>
<button @click="changeMoney(10)">花钱-10</button>
</div>
</template>

测试效果:

组合式api-跨层级组件通信provide和inject的更多相关文章

  1. 组件通信 Provide&&inject

    在父组件中利用Provide 注入数据,在所有的子组件都可以拿到这个数据 可以在vue 中用来刷新页面 <!DOCTYPE html> <html lang="en&quo ...

  2. Vue中组件通信的几种方法(Vue3的7种和Vue2的12种组件通信)

    Vue3组件通信方式: props $emit expose / ref $attrs v-model provide / inject Vuex 使用方法: props 用 props 传数据给子组 ...

  3. 【前端框架-Vue-基础】$attr及$listeners实现跨多级组件的通信

    父子 A 组件与 B 组件之间的通信: (父子组件) 如上图所示,A.B.C三个组件依次嵌套,按照 Vue 的开发习惯,父子组件通信可以通过以下方式实现: A to B 通过props的方式向子组件传 ...

  4. vue之组件通信

    vue组件通信一般分为以下几种情况: 1.父子组件通信: 2.兄弟组件通信: 3.跨多层级组件通信: 一.父子通信        父组件通过props传递数据给子组件,子组件通过emit发送事件传递数 ...

  5. VUE学习-组件通信

    vue组件通信 页面传值:$route/${prop} 组件传值: 父组件传值给子组件:参数传值 子组件传值给父组件:给父组件传过来函数传参数:通过插槽的v-slot,绑定参数 组件通信一般分为以下几 ...

  6. react组件通信那些事儿

    父组件是调用组件的组件.现在看来,感觉父组件就是一个壳子,定义好壳子里面会有什么,而子组件是一个具体的实现,说明,会用到什么东西,如果有这些东西,会进行什么操作.总之,父组件是材料,有水和泥,子组件告 ...

  7. Vue.js 3.x 中跨层级组件如何传递数据?

    provide/inject 基本用法 在 Vue.js 中,跨层级组件如果想要传递数据,我们可以直接使用 props 来将祖先组件的数据传递给子孙组件: 注:上图来自 Vue.js 官网:Prop ...

  8. 一文搞定Vue2组件通信

    vue 组件通信方式 父组件将自己的状态分享给子组件使用: 方法:父组件通过子标签传递数据,子组件通过 props 接收 子组件改变父组件的状态; 方法:父组件在子标签上通过@abc 提供一个改变自身 ...

  9. vue组件详解(三)——组件通信

    组件之间通信可以用下图表示: 组件关系可分为父子组件通信.兄弟组件通信.跨级组件通信. 一.自定义事件 当子组件需要向父组件传递数据时,就要用到自定义事件. 子组件用$emit ()来触发事件,父组件 ...

  10. vue组件详解——组件通信

    每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 组件之间通信可以用下图表示: 组件关系可分为父子组件通信.兄弟组件通信.跨级组件通信. ...

随机推荐

  1. 《Hadoop3.X大数据开发实战(视频教学版)》新书来啦!

  2. div 让a内容居中方法

    <div>标签是HTML中的一个重要标签,它代表了一个文档中的一个分割区块或一个部分.在<div>标签中,我们可以放置各种内容,包括文本.图像.链接等等.有时候,我们需要将其中 ...

  3. 使用Blazor WASM实现可取消的多文件带校验并发分片上传

    前言 上传大文件时,原始HTTP文件上传功能可能会影响使用体验,此时使用分片上传功能可以有效避免原始上传的弊端.由于分片上传不是HTTP标准的一部分,所以只能自行开发相互配合的服务端和客户端.文件分片 ...

  4. 【图像处理】如何使用matplotlib 库显示灰度图像为自定义颜色

    项目场景 我这里有一张名为airplane.jpg的灰度图像灰度图像 使用 matplotlib 库读取并显示: import matplotlib.pyplot as plt root=" ...

  5. 关于LUN的归属控制器

    ALUA (Asymmetric logic Unit Access)  架构 在ALUA (Asymmetric logic Unit Access)  架构中,LUN有归属控制器,客户在创建LUN ...

  6. Vue之仿百度搜索框

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. ES6入门(一)

    1.let声明的变量只在let命令所在的代码块内有效 2.不存在变量提升,先使用变量,后定义变量,就会报错. 3.let不允许在相同作用域内,重复声明同一个变量.

  8. 概率期望 DP 题解合集

    期望这东西学了一次忘了,再学一次过了两天又不会了.我是鱼. 故写此博客以便加深记忆及日后复习. NOIP 前恶补期望(? 希望有用,RP++() 经典问题 1 某事件发生概率为 \(p\),则该事件首 ...

  9. [SWPUCTF 2021 新生赛]非常简单的逻辑题

    一道简单的代码逆向,根据提供的py代码写出逆向代码,没怎么做过这种题开始没什么思路,原来直接暴力就好 直接写出暴力代码

  10. 本地MQTT协议消息服务远程连接教程介绍

    Mosquitto是一个开源的消息代理,它实现了MQTT协议版本3.1和3.1.1.它可以在不同的平台上运行,包括Windows.Linux.macOS等.mosquitto可以用于物联网.传感器.移 ...