javascript - 从VueJS中的全局事件总线访问事件对象

标签 javascript vue.js vuejs2 vue-component

我有一些页面(在 Laravel 中),每个页面都包含一个具有不同操作 URI 的表单:

<form method="post" action="/route1">
    ...
    <button @click="emitEvent('event1')">
</form>

在 Vuejs root 中,我只有一个全局调用事件的方法:

const app = new Vue({
    el: '#app',
    methods: {
        emitEvent(event, payload) {
            EventBus.$emit(event, payload);
        }
    }
});

在我的组件中,我有一个全局事件的监听器:

data() {
    return {
        someKey: false //this value is dynamic
    }
}
mounted() {
    EventBus.$on('event1', (event) => {
        console.log(event); //returns undefined
        if(this.someKey) {
             window.location = "/another-url"; 
             //Go to this url ONLY if the is true, else go to the url from the action attibute of the form
        }
    });
}

所以基本上,如果 vue 满足某个条件,我想加载该页面。

现在,无论 vuejs 中的条件是否满足,页面都会从 html 表单加载 url。

我尝试了 @click.prevent="emitEvent('event1')"而不是 @click,但这样,如果条件为 false 并且 window.location 不运行,它就会卡住。

我正在考虑访问事件对象,然后手动阻止Default(),但只有在必要时,所以如果不是这种情况,页面将从表单的操作中加载url,但我找不到一种方法来获取Vue 中的事件对象。

我发现事件名称位于 EventBus._events.event1 中,但我无法继续,因为只有空属性,而且我不确定如何访问默认事件,以便阻止它。

我确信这一定是一种更简单/更短和更好的方法,然后为每个表单提供一个 id/class,然后访问它,然后获取它的 action 属性,这是我需要的 url,最后如果访问该 url条件不满足。这种方式可能可行,但它可能是一种旧风格?

无论如何,我在这里,感谢任何帮助。

最佳答案

您的错误位于@click-监听器中,您的调用:

emitEvent('event1')

使用一个参数调用函数,因此函数中的事件参数将始终是“string”类型的“event1”。

要回答您的问题,您必须将 @click-listener 更改为:

@click="(e) => { emitEvent(e, 'event1') }"

说明:

当 @click-listener 获取 function 作为值时,它将使用 event 作为第一个(也是唯一的)参数来调用该函数。在您的情况下,您给 @click-listener 一个 undefined 因为您没有返回值。

这里仔细看看this doc.

关于javascript - 从VueJS中的全局事件总线访问事件对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55403274/

相关文章:

javascript - 加载选项列表一次并将其渲染到客户端的多个选择框?

javascript - C#:如何对具有附加事件处理程序的属性执行方法(没有堆栈溢出)

javascript - Vue2获取图像src

javascript - 我想以异步方式执行常规函数

javascript - 在图像上创建具有用户输入大小的网格

vue.js - 模板 v-for 循环中的增量变量

javascript - 通过 ajax 调用在 Vue.js 中填充下拉列表

javascript - 在 mounted() 中阻止应用程序,直到使用 Amazon cognito 和 Vue.js 对用户进行身份验证

vue.js - 具有 v-once 效果的功能组件

javascript - .vue 文件中未定义的属性或方法