$attrs和 $listeners如何使用呢?

  • $attrs是用来将数据从爷组件传递给孙组件的。(理解为之前的父传子)
  • $listeners是用来从孙组件中触发爷组件中事件的。(理解为之前的子传父)

$attrs的使用:

  • 孙子组件正常写功能代码,正常定义props 来接收数据,这里假设props里面定义了一个字符串类型的name。
  • 父组件使用 $attrs (v-bind=" $attrs")
  • 爷爷组件正常以前父传子的写法(:name=“name”)
    (这里需要注意的是父组件中不需要接收props,只要在孙组件中接收就可以。)
<!-- 在爷爷组件中(index.vue) -->
<Father :name="name"/>
<!-- 在父组件中(father.vue) -->
<Son v-bind="$attrs"/>
<!-- 在孙子组件中(son.vue) -->
<template><div class="home">{{name}}</div>
</template>
<script>
export default {data() {return {};},props: {name: {default: String},},
};
</script>

$listeners的使用:

  • 在爷组件(index.vue)中,绑定事件。
  • 在父组件中,也是类似绑定事件,但是这里绑定的不是具体的事件,而是v-on=“$listeners”。
  • 在孙组件中,需要的时候触发( $emit)这个事件即可。
<!-- 在爷爷组件中(index.vue) -->
<Father :name="name" :newHome.sync="newHome" />
<!-- 在父组件中(father.vue) -->
<BaseButton  v-on="$listeners"></BaseButton>
<!-- 在孙子组件中(son.vue) -->
<template><div class="base_button"><el-button @click="update">我是孙子组件</el-button></div>
</template><script>
export default {methods: {update() {const newHome = {name: "new",};this.$emit("update:newHome", newHome);},},
};
</script>

总结:

其实 $attrs和 $listeners相当于是一个中转,主要用在父亲组件上。爷组件和孙组件保持以前的使用即可!

vue中如何优雅实现爷孙组件的数据通信($attrs/$listeners)相关推荐

  1. Vue 组件传值通信、父子组件、爷孙组件传值、方法调用

    组件传:vue子组件改变父组件中data的值_mldwyy的博客-CSDN博客_子组件修改父组件data 参考 https://www.cnblogs.com/lianxisheng/p/109073 ...

  2. vue学习(1)vue3/2下的 父子/爷孙组件间方法调用

    我这里只写父子/爷孙组件间方法调用(传值的那啥emit,on, eventbus我就不在这里写了) vue2中的写法 爷组件控制孙组件的锚点跳转(父子组件间方法调用类似) // 孙组件 <tem ...

  3. vue3组件之间通信(三)——爷孙组件传递属性和方法

    文章目录 1:setup函数传递属性和方法($attrs) 1:代码 2:主要代码和详细讲解 3:注意点 2:script setup 语法糖传递属性和方法 1:代码 2:主要代码和详细讲解 3:注意 ...

  4. vue中,应用mapbox地图——地图组件mapbox-gl和语言包@mapbox/mapbox-gl-language地图英文转中文 accesstokens-访问令牌移动端地图-leaflet

    vue中,应用mapbox地图--地图组件mapbox-gl和语言包@mapbox/mapbox-gl-language用于将地图上的英文转中文 & accesstokens-访问令牌 &am ...

  5. vue中的v-model原理,与组件自定义v-model

    VUE中的v-model可以实现双向绑定,但是原理是什么呢?往下看看吧 根据官方文档的解释,v-model其实是一个语法糖,它会自动的在元素或者组件上面解析为 :value="" ...

  6. 「后端小伙伴来学前端了」Vue中利用全局事件总线实现组件之间通信

    月亮啊月亮 你能照见南边,也能照见北边 照见她,你跟她说一声,就说我想她了. 前言 前一篇文章写了 vue 中利用 Props 实现组件之间的通信,那种方式是最简单也是最基础的组件之间的通信方式.父组 ...

  7. vue3跨组件传值(爷孙组件传值)

    在父组件中通过provide来传递 provide('data':要传递的值) 在下面的子组件或孙组件中通过 let ecorData: any = inject("data"); ...

  8. 实例-Vue中使用右键菜单之@xunleivue-context-menu组件的使用

    实例-Vue中使用右键菜单之@xunlei/vue-context-menu组件的使用 npm地址--https://www.npmjs.com/package/@xunlei/vue-context ...

  9. vue 中provide的用法_Vue多级组件provide/inject使用详解

    这次给大家带来Vue多级组件provide/inject使用详解,Vue多级组件provide/inject使用的注意事项有哪些,下面就是实战案例,一起来看一下. provide / inject 是 ...

最新文章

  1. python第一单元笔记_Python 初学笔记 - 第一章-列表
  2. bzoj1334[Baltic2008]Elect(背包dp)
  3. Windows App开发之集合控件与数据绑定
  4. 最简单的composer 包 使用
  5. 吴恩达ex3_吴恩达Machine Learning Ex3 python实现
  6. Google Cloud Platform中没有Active Directory域的可用性组
  7. Apache Flink 在国有大型银行智能运营场景下的应用
  8. IE8无法取得客户端完整路径的解决办法
  9. VIM 编辑器配置与使用
  10. 3dmax渲染器下载VRay4.1渲染器下载安装教程(支持3dmax2013-2019)
  11. 药店管理系统/APP/小程序/网站
  12. 富士通Fujitsu DPK750 Pro 打印机驱动
  13. matlab两线段的夹角,两条线段的夹角计算
  14. word文档设置页眉页脚的技巧
  15. as的断点调试与高级断点调试
  16. 有关三年级计算机课的日记,今天的自习课三年级日记
  17. SurfaceView和View的区别
  18. android绘制view的撤销,DrawingView android 上的一个涂鸦控件。可以设置画笔的粗细,颜色,撤销上一笔涂鸦,提供保存图片的接口。 @codeKK Android开源站...
  19. Android.Cynos.7.origin木马已感染900万+安卓设备
  20. vue----前端精选50道面试题---一个小白的孤芳自赏

热门文章

  1. UOJ#748-[UNR #6]机器人表演【dp】
  2. 「设计模式(五) - 代理模式」
  3. 开启超神模式!分享一个瞬间提升工作学习效率的好方法
  4. 【ArcGIS Pro二次开发】(5):UI管理_自定义控件的位置
  5. 计算机专业的高级称呼,软考高级和中级全称~~
  6. 网页自动填表html,WebBrowser1.HtmlInput 实现浏览器文本自动填写与点击
  7. 分布式事务(三):分布式事务解决方案之TCC(Try、Confirm、Cancel)
  8. Jenkins之自动进行360加固
  9. 随机红包 java_微信随机生成红包金额算法java版
  10. 用开源力量抗击新冠疫情!腾讯作为创始成员加入Linux基金会公共卫生计划