我有两个 Vue 组件:
Vue.component('A', {});
Vue.component('B', {});
如何从组件 B 访问组件 A?组件之间的通信如何进行?
原文由 Cas 发布,翻译遵循 CC BY-SA 4.0 许可协议
除了 pesla 的回答之外,请查看 构建大型应用程序下指南的状态管理部分:http: //vuejs.org/guide/application.html#State_Management 。我在这里基于此创建了一个 jsfiddle : https ://jsfiddle.net/WarwickGrigg/xmpLg92c/。
这种技术也适用于组件:父子、兄弟姐妹组件关系等。
var hub = {
state: {
message: 'Hello!'
}
}
var vmA = new Vue({
el: '#appA',
data: {
pState: {
dA: "hello A"
},
hubState: hub.state
}
})
var vmB = new Vue({
el: '#appB',
data: {
pState: {
dB: "hello B"
},
hubState: hub.state
}
})
原文由 Warwick 发布,翻译遵循 CC BY-SA 3.0 许可协议
13 回答12.9k 阅读
7 回答2.1k 阅读
9 回答1.7k 阅读✓ 已解决
6 回答1.5k 阅读
3 回答1.3k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
跨组件通信在 Vue.js 文档中没有得到太多关注,也没有很多教程涵盖这个主题。由于组件应该是隔离的,因此您永远不应该直接“访问”组件。这会将组件紧密耦合在一起,而这正是您要避免的事情。
Javascript 有一个很好的通信方法:事件。 Vue.js 内置了事件系统,主要用于父子通信。 从文档:
他们的示例代码来说明事件系统:
Dan Holloran 最近写了一篇关于他在跨 组件 消息传递方面的“挣扎”的文章,分为 两篇。如果您需要在没有父子关系的组件之间进行通信,这可能对您有所帮助。
我体验过的另一种方法(除了使用事件进行通信)是使用中央组件注册表,该注册表引用了公共 API 以及绑定到它的组件实例。注册表处理对组件的请求并返回其公共 API。
在 Vue.js 的上下文中,事件将由我选择的武器。