[vue2] 使用provide和inject时,无法获取到实时更新的数据

一、场景

当vue文件中存在多级的父子组件传值(即:祖先向下传递数据)、多个子组件或孙子级组件都要使用顶级或父级的数据时,使用provide 和 inject 组合无疑是很方便的一种做法了,但如此只是注入的初始值,并不能随时拿到数据源的实时更新。
在这里插入图片描述

二、示例代码

祖先级

<template><div><testComp :compName="compName"/><el-button @click="changeCompName">改变compName</el-button></div>
</template><script>
import testComp from './testComp';export default {data () {return {compName: '测试'};},components: {testComp},methods: {changeCompName () {this.compName += '1';},},provide () {return {compName: this.compName,};},
};
</script><style scoped></style>

父级

<template><div><div>----- {{ compName }}</div><child/></div>
</template><script>
import child from './child';export default {name: 'testComp',props: {compName: {type: String,default: ''}},components: {child},
};
</script><style scoped></style>

孙子级

<template><div>孙子-----{{ nameChild }}</div>
</template><script>export default {name: 'child',inject: [ 'nameChild' ],};
</script><style scoped></style>

在这里插入图片描述

在这里插入图片描述
孙子级并不能随时拿到数据源的实时更新

三、改造:实时获取数据源

1、在provide时,返回一个方法,方法中 return 目标数据

provide () {return {getCompName: () => this.compName,};},

2、在inject后,使用计算属性computed计算出一个新值

<template><div>孙子-----{{ compName }}</div>
</template><script>export default {name: 'child',inject: [ 'getCompName' ],computed: {compName () {return this.getCompName();}}};
</script><style scoped></style>


参考:

Vue2:使用provide和inject时,无法获取到实时更新的数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/496404.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用便签快速分类工作待办事项

在日常工作和生活中&#xff0c;我们经常需要处理各种各样的待办事项。而有效地分类这些任务&#xff0c;可以帮助我们更好地管理时间和提高工作效率。使用便签是一种简单而实用的方法&#xff0c;下面将介绍如何利用好用便签来快速分类工作待办事项。 首先&#xff0c;你可以…

【前端入门】设计模式+单多页+React

设计模式是一种解决特定问题的经验总结&#xff0c;它提供了经过验证的解决方案&#xff0c;可以在软件开发过程中使用。设计模式可以帮助前端开发人员更有效地组织和管理代码&#xff0c;并提供一种共享的语言和框架&#xff0c;以便与其他开发人员进行交流。 以下是一些常见…

航海雷达练习软件SPx Radar Trainer

产品简介 航海雷达练习软件SPx Radar Trainer是一款基于计算机的模拟训练软件&#xff0c;为小型船舶、初步接触航海操作的学员提供了虚拟练习环境&#xff0c;让学员可以在计算机上熟悉雷达视频图像与实际船舶运行环境的结合、以便于更好的驾驶船舶避撞。 产品特色 【模拟小…

python脚本实现全景站点矩阵转欧拉角

效果 脚本 import re import numpy as np import math import csv from settings import * # 以下是一个示例代码,可以输入3*3旋转矩阵,然后输出旋转角度:# ,输入3*3旋转矩阵# 计算x,y,z旋转角def rotation_matrix_to_euler_angles(R):

c++异常机制(1) -- 什么是异常机制

情况一: 之前&#xff0c;我们提到了防御性编程&#xff0c;就是说我们预判一些可能出现的问题&#xff0c;然后进行相应的处理。 但是&#xff0c;这些处理往往是在函数中进行的。 比如&#xff0c;判断数组下标是否合法。 -》 if(下标 < 0){ 相应的处理 }; 如上&…

Python中常用的热门库Pygame介绍

Pygame是一个跨平台的Python模块和库&#xff0c;用于创建视频游戏&#xff0c;如独立游戏和多媒体应用。它提供了一组用于制作游戏的常用功能&#xff0c;包括图形、声音、碰撞检测等。Pygame是基于SDL&#xff08;Simple DirectMedia Layer&#xff09;库的&#xff0c;SDL是…

2024年要大干一场!桌面备忘录哪个好?桌面记事本便签软件哪里下载?

当谈到桌面备忘录哪个好的时候&#xff0c;我们常常会陷入选择困难之中。在这个信息爆炸的时代&#xff0c;我们需要一个高效、便捷、易用的工具来帮助我们记录重要事项&#xff0c;提醒日程安排&#xff0c;让我们可以在2024年当中大干一场。而在众多桌面备忘录软件中&#xf…

折叠面板展开动画

<template><div><div class"p_open" click"handleOpen">{{showMore ? 收起筛选 : 展开筛选}}</div><el-collapse-transition><div class"item" v-show"showMore"><div>[Vue warn]: Error …

Asymmetric Directional Coupler(非对称型定向耦合器)

Asymmetric Directional Coupler 正文示例1------直波导耦合部分尺寸不一致示例2------直波导耦合部分材料有区别 正文 在 Directional coupler and Synchronous optical coupling&#xff08;定向耦合器和同步光耦合&#xff09; 和 Symmetric Directional Coupler and trans…

Jvm之内存泄漏

1 内存溢出 1.1 概念 java.lang.OutOfMemoryError&#xff0c;是指程序在申请内存时&#xff0c;没有足够的内存空间供其使用&#xff0c;出现OutOfMemoryError。产生该错误的原因主要包括&#xff1a;JVM内存过小。程序不严密&#xff0c;产生了过多的垃圾。 程序体现: 内…

Socket的学习——ipc

来&#xff0c;先给你看一张图。

GDB动态调试学习-2-【断点】

文章目录 在程序地址上打断点在程序入口处打断点获取程序入口地址 在命名空间设置断点命名空间给命名空间的函数下断电 在文件行号上打断点保存已经设置的断点设置临时断点设置条件断点command指令 忽略断点 在程序地址上打断点 当调试汇编程序&#xff0c;或者没有调试信息的…