【问题标题】:VueJS: Call method from component using eventbusVueJS:使用事件总线从组件调用方法
【发布时间】:2018-06-13 13:04:02
【问题描述】:

我正在使用 VueJS,并且想在 .Vue 组件中触发一个方法。事件总线工作正常。我根据这篇文章创建了这个:https://alligator.io/vuejs/global-event-bus/

在 eventbus 函数中,我想从组件中调用方法。我怎样才能做到这一点?我试过this.doSearch(),但这不起作用。有什么建议吗?

//Event listener
EventBus.$on('i-got-searched', search => {
    if (!(search === undefined || search === null)) {
        console.log(`Debug: ${search}`)
    }
});

//Component
export default {
    methods: {
        doSearch(input) {
            console.log(input);
        }
    }
}

【问题讨论】:

标签: vue.js vuejs2 vue-component


【解决方案1】:

使用 Vue 的 ref 指令应该适合你:

<search-comp ref="search"></search-comp>

然后在你的 eventbus 中使用:

var search = parent.$refs.search;
search.doSearch(val);

这是一个工作演示: https://codepen.io/egerrard/pen/vpJdQJ

这里是文档: https://vuejs.org/v2/api/#ref

【讨论】:

  • 从另一个组件调用一个组件的方法是一种不好的做法。第二个组件在响应事件时应该自己调用方法,或者可以发送不同的事件来触发它。
  • @RoyJ 我同意。在该 codepen 链接中,您还可以看到两个组件相互发射,因此它们可以调用自己的方法。如果您认为它更适用,我也可以将该代码添加到答案中。以上是一个快速的解决方案。
  • 我认为这很重要。我认为(尽管我不确定)最初的问题是要求这种封装破损,这让我认为应该不鼓励这样做。
猜你喜欢
  • 2020-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-20
  • 1970-01-01
  • 2019-08-19
  • 1970-01-01
  • 2018-04-17
相关资源
最近更新 更多