Vue JS 访问“父组件的兄弟组件”的对象

Posted

技术标签:

【中文标题】Vue JS 访问“父组件的兄弟组件”的对象【英文标题】:Vue JS access objects of "parent component's sibling component" 【发布时间】:2019-11-11 09:14:36 【问题描述】:

我有以下组件结构:

SideHead 组件有一个方法,在该方法中我想访问 Incidents 的对象并在它们上调用一些函数。

简而言之,从“A”中的方法,我想访问“B”的对象并调用它们的方法。

我认为发出一个事件并以某种方式传播它可能会有所帮助,但我无法将它连接起来工作。 有什么想法吗?

【问题讨论】:

【参考方案1】:

使用Vuex等状态管理来实现非父子组件之间的通信。

$root 或事件总线发送事件是不可靠的(容易出现竞争条件)并且难以调试 - 事件捕获将默默地“失败”。即,您永远不会被告知尚未捕获事件。

【讨论】:

【参考方案2】:

1) 您必须为每个组件添加一个 ref 标签。 <app ref="App">, <index ref="Index">, <incidents ref="Incidents">, <incident-by-prio ref="IncidentByPrio">

并像这样从根A组件调用它:

this.$root.$refs.App.$refs.Index.$refs.Incidents.$refs.IncidentsByPrio.SomeMethod()

编辑 1:

2) 从根上的组件 A 发出一个事件。

组件 A

this.$root.$emit('SomeEvent', ...);

在你的目标组件中捕获这个事件:

this.$root.$on('SomeEvent', () => ...);

【讨论】:

以上是关于Vue JS 访问“父组件的兄弟组件”的对象的主要内容,如果未能解决你的问题,请参考以下文章

Vue.js 在 v-for 循环中访问嵌套对象

如何在 vue.js 应用程序中访问外部 json 文件对象

无法从动态导入访问对象属性。 Vue.js + ts

如何访问 vue js 列表中的对象元素(nuxt)

Vue.js源码学习——Vue对象在data中定义的属性为什么可以直接通过this.xxx访问?

访问 Vue JS 实例监视对象中的 $refs 数组