Vue组件通信

2024-01-31

我有两个 Vue 组件:

Vue.component('A', {});

Vue.component('B', {});

如何从组件B访问组件A?组件之间的通信如何进行?


跨组件通信在 Vue.js 文档中并没有引起太多关注,也没有很多教程涵盖这个主题。由于组件应该是隔离的,因此您永远不应该直接“访问”组件。这会将组件紧密地耦合在一起,而这正是您想要阻止做的事情。

Javascript 有一种出色的通信方法:事件。 Vue.js内置了事件系统,主要用于父子通信。来自文档 http://012.vuejs.org/guide/components.html#Event_System:

虽然您可以直接访问 Vue 实例的子级和父级,但使用内置事件系统进行跨组件通信会更方便。它还使您的代码耦合更少且更易于维护。一旦建立了父子关系,您就可以使用每个组件的事件实例方法来调度和触发事件。

他们的示例代码来说明事件系统:

var parent = new Vue({
  template: '<div><child></child></div>',
  created: function () {
    this.$on('child-created', function (child) {
      console.log('new child created: ')
      console.log(child)
    })
  },
  components: {
    child: {
      created: function () {
        this.$dispatch('child-created', this)
      }
    }
  }
}).$mount()

Dan Holloran 最近写了一篇关于他在跨组件消息传递方面的“斗争”的文章,two https://danholloran.me/blog/2015/12/07/vues-js-component-messaging/ pieces https://danholloran.me/blog/2015/12/08/vues-js-component-messaging-continued/。如果您需要在没有父子关系的组件之间进行通信,这可能会对您有所帮助。

我经历过的另一种方法(除了使用事件进行通信之外)是使用中央组件注册表,该注册表具有对公共 API 的引用以及与其绑定的组件实例。注册表处理对组件的请求并返回其公共 API。

在 Vue.js 的上下文中,事件将是我选择的武器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue组件通信 的相关文章

随机推荐

  • 如何在 primefaces 数据表中显示可变数量的列

    我有以下数组列表 class Report private String manufacturer private String color private List
  • 代码覆盖率结果窗口中的额外类

    在 Visual Studio 2010 中运行自动化测试后 代码覆盖率结果 选项卡显示一些我不明白的内容 接受测试的类之一称为 ApplicationData 它显示在代码覆盖率列表中 但它的变体也会出现 在本例中出现了三次 见下文 如果
  • 如何在 Javascript 中比较 C# Viewbag 中的值?

    我想比较一个布尔值Viewbag在 JavaScript 中 所以一开始我尝试了这个 if Viewbag MyBoolValue do sth 但后来我在控制台中出现错误 例如 Value False True is not declar
  • django:如何从包含外键的多个模型制作一种表单

    我正在尝试在一页上制作一个使用多个模型的表单 这些模型相互参考 我在验证表单时遇到问题 因为我不知道如何将表单中使用的两个模型的 id 获取到表单中以进行验证 我在模板中使用了隐藏键 但我不知道如何使其在视图中工作 我的代码如下 views
  • 如何使用笔记本jupyter在html中发布R代码

    我看到很多人谈论使用 jupyter 笔记本将代码转换和共享为 HTML 就像小菜一碟 但它对我来说变成了一场噩梦 我确实可以通过使用下拉菜单下载代码将其转换为 html 但它只能在我自己的计算机上访问 如果我将其作为链接发送给其他人 他们
  • Seaborn:如何用多个折线图制作子图? sns.relplot 似乎不支持? [复制]

    这个问题在这里已经有答案了 seaborn 文档区分了图形级函数和轴级函数 https seaborn pydata org introduction html figure level and axes level functions h
  • 如何使正则表达式匹配的一部分成为可选?

    这是一个示例字符串 123456 p654321 目前 我正在使用这场比赛来捕捉123456 and 654321分为两个不同的组 0 9 p 0 9 但有时 p654321字符串的一部分不会存在 所以我只想捕获第一组 我试图通过附加使第二
  • TFS 区域、最佳定义和配置

    最近迁移到 TFS 2010 后 我想知道区域的最佳或最广泛接受的定义或配置是什么 我在网上能找到的唯一有用的文章是this one http blogs msdn com b mattlind archive 2007 01 08 wha
  • SQLAlchemy 中的验证

    如何在 SQLAlchemy 中获取所需的验证器 实际上我只是想确信用户填写了表单中的所有必填字段 我使用 PostgreSQL 但它没有意义 因为从 models py 文件中的对象创建的表 from sqlalchemy import
  • Elixir 中的宏扩展:如何定义两个宏,一个使用另一个宏?

    我正在 Elixir 中尝试宏 因此 我要展示的代码当然应该使用简单的函数来完成 但是 我正在尝试 我想定义2个宏 A和B 并让A使用B来试验宏扩展 当我使用 A 时 我收到一个编译错误 指出function B is 不明确的 这是代码
  • 更改 :before 和 :after 伪元素的样式? [复制]

    这个问题在这里已经有答案了 这就是我的代码的样子 mainSpan before css background url gfx cmn main bg png 这似乎不起作用 所以我问是否可以添加 使用 jQuery 将背景图像添加到阴影元
  • 如何在 cmake 上获取库的完整本机名称?

    我需要将构建的库的本机名称 libfoo so 或 foo dll 传递给 add custom command 如何获取目标的完整库名称 该财产LOCATION有它但有完整的路径 属性 OUTPUT NAME 不返回任何内容 您可以使用生
  • 使用 Storyboard 中的属性字符串本地化 UILabel

    我有一个 UILabel 其文本在情节提要中设置为 归属 当我生成 Main strings 文件以翻译成其他语言时 该标签的文本不会出现 我尝试通过复制对象 ID 手动将条目添加到 Main strings 文件中 我尝试设置 text
  • Firebird x Windows 7 x gds32.dll错误

    我有一个来自新客户的 fdb 文件 firebird 他不知道版本 我尝试过使用一些 GUI 来访问数据库 但没有成功 他们都说它缺少 gds32 dll 但我有这个 我已将此 dll 复制到 GUI 文件夹 已将 dll 复制到 syst
  • GlGenTextures 不断返回 0

    我正在尝试生成这样的纹理 define checkImageWidth 64 define checkImageHeight 64 static GLubyte checkImage checkImageHeight checkImageW
  • 如何模拟 @InjectMocks 类的方法?

    例如我有处理程序 Component public class MyHandler AutoWired private MyDependency myDependency public int someMethod return anoth
  • 回调()或返回回调()

    可能我对 Node 的事件循环了解不够 说我有一个函数foo其中包含一个异步函数async func 我有吗 1 function foo callback stuff here async func function do somethi
  • 负载平衡线程请求百分比

    我有一个工作线程池 我在其中根据百分比向它们发送请求 例如 工作人员 1 必须处理总请求的 60 工作人员 2 必须处理总请求的 31 最后工作人员 3 必须处理 9 我需要从数学上知道如何缩小数字并保持比率 这样我就不必向线程 1 发送
  • 如何在 MFC 中的 CRichEditCtrl 中显示红色波浪线

    我正在致力于在 MFC 应用程序中实现拼写检查器 我想要做的是在拼写错误的单词下显示红线 我找到了一个示例 但它仅适用于简单的编辑框 因为它可以简单地使用编辑控件默认字体进行计算来绘制波浪线 但它不适用于丰富的编辑控件 因为在丰富的编辑控件
  • Vue组件通信

    我有两个 Vue 组件 Vue component A Vue component B 如何从组件B访问组件A 组件之间的通信如何进行 跨组件通信在 Vue js 文档中并没有引起太多关注 也没有很多教程涵盖这个主题 由于组件应该是隔离的