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. 快手根据ID取商品详情 API 返回值说明

    ​ item_get-根据ID取商品详情 注册开通 ks.item_get 公共参数 名称 类型 必须 描述 key String 是 调用key(必须以GET方式拼接在URL中) secret St ...

  2. 探索 Java 线程的创建

    by emanjusaka from ​ https://www.emanjusaka.top/archives/7 彼岸花开可奈何 本文欢迎分享与聚合,全文转载请留下原文地址. 前言 在并发编程中我 ...

  3. ConcurrentHashMap底层源码分析

    ConcurrentHashMap源码底层分析 1.ConcurrentHashMap初始化 jdk8之后,ConcurrentHashMap采用了HashMap的底层结构(数据,链表,红黑树),在此 ...

  4. open与fopen的区别

    1. 来源 从来源的角度看,两者能很好的区分开,这也是两者最显而易见的区别: open是UNIX系统调用函数(包括LINUX等),返回的是文件描述符(File Descriptor),它是文件在文件描 ...

  5. 一些对dp突然的理解

    突然想到了一些理解,感觉有些模糊,怕忘记,就赶紧记下来就是对于状态的设计 用01背包举例子吧,我们设计状态的时候一定是要保证所有可能在最后优秀的子状态在前面的时候是能够保留下来的也就是我们的状态设计要 ...

  6. 【vulnhub】——DC-9靶机

    [vulnhub]--DC-9靶机 1. 主机发现 扫描kali主机C段(Kali和DC-9主机在同一个网关下): 发现主机为192.168.108.146,进行详细端口扫描: 可以看到靶机开了一个s ...

  7. Kraft模式下Kafka脚本的使用

    Kafka集群 版本:V3.5.1 名称 Node1 Node2 Node3 IP 172.29.145.157 172.29.145.182 172.29.145.183 (1)查看Kraft集群中 ...

  8. 掌握 Kubernetes 故障排除:有效维护集群的最佳实践和工具

    Kubernetes 是一款管理容器化应用程序的强大工具.然而,与任何复杂的系统一样,使用它时也可能出错.当问题出现时, 掌握有效的故障排除技术和工具非常重要. 本文将介绍以下步骤,助您了解事件收集的 ...

  9. 2023-10-25:用go语言,假如某公司目前推出了N个在售的金融产品(1<=N<=100) 对于张三,用ai表示他购买了ai(0<=ai<=10^4)份额的第i个产品(1<=i<=N) 现给出K(

    2023-10-25:用go语言,假如某公司目前推出了N个在售的金融产品(1<=N<=100) 对于张三,用ai表示他购买了ai(0<=ai<=10^4)份额的第i个产品(1& ...

  10. Leetcode.456单调栈

    给你一个整数数组 nums ,数组中共有 n 个整数.132 模式的子序列 由三个整数 nums[i].nums[j] 和 nums[k] 组成,并同时满足:i < j < k 和 num ...