【问题标题】:VUE js call a child component method in a different component hierarchyVUE js 在不同的组件层次结构中调用子组件方法
【发布时间】:2019-05-28 06:16:28
【问题描述】:

我有以下 vuejs 组件层次结构。 当每次调用 COMP_A_TWO submit() 方法时,我想要调用 COMP_B_ONE validate() 方法。

MAIN_COMPONENT
              COMP_A_ONE
                    COMP_B_ONE
                          validate()
                    COMP_B_TWO
                          validate()
              COMP_A_TWO
                    submit()      

我已经实现了在 COMP_A_TWO 中触发提交时发出,可以在 MAIN_COMPONENT 中收听

submit() {
  this.$emit('submit')
}

在这方面似乎最好的方法是什么?任何建议表示赞赏。

【问题讨论】:

  • 您可以使用事件总线与兄弟组件通信。

标签: vue.js vuejs2 vue-component


【解决方案1】:

我可以通过两种方式完成。

1 - 全球EventBus 我将创建一个 eventBus 并从任何文件在其上注册事件并在任何地方收听 -

import { EventBus } from '@/eventBus' 
// simply import it to component which need listen the event


//Register Event where you have your methods - like In your COMP_B_TWO                   
 EventBus.$on('validate', () => { this.validate() })

// Emit event from another component
EventBus.$emit('validate')// Like directly from your COMP_A_TWO

要了解如何创建 eventBus,请遵循此 - Global Event Bus Vue


我能想到的另一种方式是

2 - 引用

添加对COMP_A_ONE的引用

<COMP_A_ONE ref = "one" />

然后添加对COMP_B_ONE的引用

<COMP_B_ONE ref = "b-one" />

现在当你从main component触发submit

执行它 -

this.$on('submit', () => {
  this.$refs.one['b-one'].validate()
})

这完全取决于你想走哪条路 -

  • 如果您需要拨打validate更多的地方,我建议选择EventBus
  • 您只需要当前组件即可拥有它,使用Refs

【讨论】:

  • 更喜欢 eventBus 方法。效果很好。
  • 乐于提供帮助 :) 如果您认为答案符合您的所有要求,请将其标记为已接受。谢谢
猜你喜欢
  • 2018-03-17
  • 2018-05-27
  • 2019-12-10
  • 2023-03-25
  • 2021-04-09
  • 1970-01-01
  • 2020-02-12
  • 2021-09-24
  • 1970-01-01
相关资源
最近更新 更多