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中,父组件和子组件之间是如何通信的?
在Vue中,父组件和子组件之间是如何通信的?
159 3
|
存储 JavaScript BI
vue组件间通信的几个方法
vue组件间通信的几个方法
146 0
|
3月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
363 2
|
JavaScript 前端开发 开发者
Vue的事件处理机制提供了灵活且强大的方式来响应用户的操作和组件间的通信
【5月更文挑战第16天】Vue事件处理包括v-on(@)指令用于绑定事件监听器,如示例中的按钮点击事件。事件修饰符如.stop和.prevent简化逻辑,如阻止表单默认提交。自定义事件允许组件间通信,子组件通过$emit触发事件,父组件用v-on监听并响应。理解这些机制有助于掌握Vue应用的事件控制。
145 4
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。
|
存储 JavaScript
Vue 组件间如何通信
Vue组件间通信是指在Vue应用中,不同组件之间传递数据和事件的方法。常用的方式有:props、自定义事件、$emit、$attrs、$refs、provide/inject、Vuex等。掌握这些方法可以实现父子组件、兄弟组件及跨级组件间的高效通信。
|
JavaScript
关于Vue非父子组件通信遇到的细节问题
本文讨论了Vue中非父子组件通信的一个细节问题,即当使用事件总线($eventsBus)进行通信时,需要确保两个组件能够同时在页面上显示,否则可能无法正确触发和监听事件。作者通过组件A和B的例子说明了这一点,并指出解决方案是在一个共同的父组件C中监听事件。
110 2
关于Vue非父子组件通信遇到的细节问题
|
存储 JavaScript
Vue 组件间通信的方式有哪些?
Vue组件间通信主要通过Props、Events、Provide/Inject、Vuex(状态管理)、Ref、Event Bus等实现,支持父子组件及跨级组件间的高效数据传递与状态共享。
Vue3基础(十san)___父子组件通信___props、emit___provide、inject
文章介绍了Vue3中父子组件通信的两种方式:通过`props`和`emit`传递数据和事件,以及使用`provide`和`inject`在组件树中传递数据。
242 0
Vue3基础(十san)___父子组件通信___props、emit___provide、inject
|
JavaScript 前端开发 测试技术
VUE——vue中组件之间的通信方式有哪些
VUE——vue中组件之间的通信方式有哪些
213 1