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

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

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

A -> B -> C

d24.3.png

代码实例

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>

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&#34; v-on&#61;&#34;$listeners"></c-child>

</div>
</template>

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

export default {
props: ['nameToB'],

components: { CChild },

data () {
return {};
},

// inheritAttrs: false,
};
</script>

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>

最终,通过B实现了A与C的通信

d24.4.png


参考

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


            </div>
目录
相关文章
|
JavaScript
Vue中 使用 iframe 嵌入本地 HTML 页面 并 相互通信
Vue中 使用 iframe 嵌入本地 HTML 页面 并 相互通信
1852 0
Vue中 使用 iframe 嵌入本地 HTML 页面 并 相互通信
|
JavaScript 前端开发
浅谈Vue中的12种组件通信方式及理解
个人认为Vue中组件通信思想与React一致,都是单向数据流,高阶流向低阶(父传子),子组件只可通知父组件,此时数据还是在父级变更而不是发生流动。
|
JavaScript
Vue父子组件传值(porvide+inject实现组件通信)
如果我们需要把父组件的值传递给子组件,而且子组件可能存在层层嵌套,那么就可以使用provide+inject的方法来实现组件之间的通信
193 0
Vue父子组件传值(porvide+inject实现组件通信)
|
缓存 JavaScript 前端开发
【测试平台开发】十九、前端vue重构 — computed、watch、组件通信等常用知识整理
【测试平台开发】十九、前端vue重构 — computed、watch、组件通信等常用知识整理
【测试平台开发】十九、前端vue重构 — computed、watch、组件通信等常用知识整理
|
JavaScript
vue父子组件及非父子组件通信
vue父子组件及非父子组件通信
122 0
vue父子组件及非父子组件通信
|
JavaScript CDN
CDN方式使用Vue组件通信
CDN方式使用Vue组件通信
184 0
|
JavaScript
Vue中父组件与子组件之间的通信
Vue中父组件与子组件之间的通信
114 0
|
JavaScript
Vue黑科技之组件万能通信方法
Vue黑科技之组件万能通信方法
148 0
|
JavaScript
【Vue 组件化开发 三】父组件给子组件传递数据、组件通信(父传子、子传父)、父访问子(children、ref)、动态组件(is、component)
本章学习父组件给子组件传递数据、组件通信(父传子、子传父)、父访问子(children、ref)、动态组件(is、component)。
205 0
|
数据库
基于springboot+mybatisplus+vue的课程学分管理系统
基于springboot+mybatisplus+vue的课程学分管理系统
143 0
基于springboot+mybatisplus+vue的课程学分管理系统