当前位置: 首页 > news >正文

【vue2项目】爷孙组件怎么传值和调用方法

爷孙组件怎么传值和调用方法

  • 爷孙组件通信
    • 场景
    • 孙子组件想要爷爷组件的数据
    • 孙子组件调用爷爷组件的方法
    • 其他

爷孙组件通信

项目是旧项目,用的vue2,所以以下方法都是针对的vue2哈

场景

有一个table上面有操作项,有查看按钮,这个table叫做爷爷组件,点击查看操作,打开弹窗又是一个table,这个table叫做父亲组件,弹窗的table上也有操作按钮,会打开第二个弹窗,第二个弹窗就是孙子组件。
孙子组件更新状态后,只会回到父亲组件页面,但是爷爷组件上有状态也需要更新,所以要用到爷孙通信

孙子组件想要爷爷组件的数据

  1. $attr 方法

类型:{ [key: string]: string }
包含了父作用域中不作为 prop 被识别 (且获取) 的 attribute 绑定 (class 和 style 除外)。当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定 (class 和 style 除外),并且可以通过 v-bind=“$attrs” 传入内部组件——在创建高级别的组件时非常有用。

理解:$attrs就是一个容器对象,这个容器对象会存放:父组件传过来的且子组件未使用props声明接收的数据

  • 爷爷组件:通过props传递给父组件
<son:id="id" />
  • 爸爸组件:在孙子组件上绑定$attr
<grondSon v-bind="$attr" />
  • 孙子组件接收
<span>{{$attr.id}}</span>

总结,其实,爷组件传递给孙组件的逻辑流程就是,通过爷组件首先传递给父组件,当然父组件不在props中接收,那么爷组件传递给父组件的数据就会存放到父组件的 a t t r s 对象中里面了,然后,再通过 v − b i n d = " attrs对象中里面了,然后,再通过v-bind=" attrs对象中里面了,然后,再通过vbind="attrs",再把这个 a t t r 传递给孙组件,在孙组件中使用 p r o p s 就能接收到 attr传递给孙组件,在孙组件中使用props就能接收到 attr传递给孙组件,在孙组件中使用props就能接收到attrs中的数据了,这样就实现了,祖孙之间的数据传递

祖孙之间的数据传递,需要通过中间的父组件$attrs做一个桥梁。其实就是这个意思。

注意:$attrs一般搭配interitAttrs 一块使用,一般是inheritAttrs: false, // 默认会继承在html标签上传递过来的数据.

参考原文链接:详细讲解vue中祖孙组件间的通信之使用 a t t r s 和 attrs和 attrslisteners的方式(篇幅略长,建议收藏)

孙子组件调用爷爷组件的方法

方法一:provide 和 inject

类型:
provide:Object | () => Object
inject:Array | { [key: string]: string | Symbol | Object }

  • 爷爷组件:先用provide抛出去
provide: function () {return {getMap: this.getMap}
}
  • 孙子组件:用inject接收
inject: ['getMap']

参考官网说明:
依赖注入
provide / inject

方法二: $listener
$listeners可以将子组件emit的方法通知到爷组件

  • 父组件:绑定$listener
<sun v-bind="$attrs" v-on="$listeners"></sun>
  • 爷爷组件定义要被触发的方法
refresh(payload) {console.log("孙传祖", payload);},
  • 孙子组件
this.$emit("refresh", this.data)

其他

还有vuex, $on $bus ,后面再研究……

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • GPT带我学-设计模式-责任链模式
  • 游戏开发设计模式之外观模式
  • C语言补习课
  • 【GPT】基于GPT_API_free做一个自己的gpt
  • 服务器死机/无故宕机排查思路/服务器起不来
  • 一篇搞懂classpath,resources
  • 【STM32H743】将全局变量定义到指定内存MDK
  • 设计模式--装饰器模式
  • python脚本开头怎么写
  • 【零知识证明】MiMC哈希函数电路
  • 罗素悖论 是集合论中的一个经典悖论
  • 【C语言】十六进制、二进制、字节、位
  • 【论文阅读】Single-Stage Visual Query Localization in Egocentric Videos
  • 一键编译QT5源码脚本(交叉编译arm64、mips64版本)
  • 春秋云镜(ZZCMS 2023)·CVE-2023-50104
  • [译]Python中的类属性与实例属性的区别
  • CentOS 7 防火墙操作
  • Hexo+码云+git快速搭建免费的静态Blog
  • IDEA常用插件整理
  • Java知识点总结(JavaIO-打印流)
  • js学习笔记
  • PAT A1017 优先队列
  • Python学习笔记 字符串拼接
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 规范化安全开发 KOA 手脚架
  • ------- 计算机网络基础
  • 记一次用 NodeJs 实现模拟登录的思路
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 深入 Nginx 之配置篇
  • 思否第一天
  • 小试R空间处理新库sf
  • 学习笔记TF060:图像语音结合,看图说话
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 带你开发类似Pokemon Go的AR游戏
  • 组复制官方翻译九、Group Replication Technical Details
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • # include “ “ 和 # include < >两者的区别
  • #DBA杂记1
  • #etcd#安装时出错
  • #QT(串口助手-界面)
  • #每天一道面试题# 什么是MySQL的回表查询
  • ${factoryList }后面有空格不影响
  • (1) caustics\
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (C语言)字符分类函数
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (rabbitmq的高级特性)消息可靠性
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (剑指Offer)面试题34:丑数
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (算法)N皇后问题
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • .dwp和.webpart的区别
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET MVC 验证码