Vue基于$attrs及$listeners实现隔代通信

举报
彭世瑜 发表于 2021/08/13 23:21:22 2021/08/13
【摘要】 所谓隔代通信就是A 与C的通信 A -> B -> C 1 代码实例 A.vue <template> <div id="app"> <!-- 此处监听了事件,可以在C组件中直接触发 --> <b-child nameToB="nameToB" nameToC="nameToC" @buttonClick...

所谓隔代通信就是A 与C的通信

A -> B -> C

  
 
  • 1

在这里插入图片描述
代码实例
A.vue

<template>
  <div id="app"> <!-- 此处监听了事件,可以在C组件中直接触发 --> <b-child nameToB="nameToB" nameToC="nameToC" @buttonClick="buttonClick" > </b-child>
  </div>
</template>


<script>
import BChild from "./B.vue";

export default {
  data() { return {};
  }, components: { BChild }, methods: { buttonClick() { console.log("buttonClick..."); }
  }
};
</script>

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

B.vue

<template> <div> <h1>B组件</h1> <p>name: {{nameToB}}</p> <p>$attrs: {{$attrs}}</p> <hr> <!-- C组件中能直接触发buttonClick的原因在于 B组件调用C组件时 使用 v-on 绑定了$listeners 属性 --> <!-- 通过v-bind 绑定$attrs属性,C组件可以直接获取到A组件中传递下来的props(除了B组件中props声明的) --> <c-child v-bind="$attrs" v-on="$listeners"></c-child> </div>
</template>

<script>
 import CChild from './C.vue';

 export default { props: ['nameToB'], components: { CChild }, data () { return {}; }, // inheritAttrs: false,
 };
</script>

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

C.vue

<template> <div> <h1>C组件</h1> <p>name: {{nameToC}}</p> <p>$attrs: {{$attrs}}</p> <button @click="buttonClick">点击C按钮</button> </div>
</template>

<script> export default { // inheritAttrs: false, props: ['nameToC'], data () { return {}; }, methods: { buttonClick(){ this.$emit('buttonClick'); } } };
</script>

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

最终,通过B实现了A与C的通信
在这里插入图片描述

参考
Vue v2.4中新增的 a t t r s 及 attrs及 attrslisteners属性使用教程

文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。

原文链接:pengshiyu.blog.csdn.net/article/details/101174233

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。