【发布时间】:2019-08-19 13:25:05
【问题描述】:
我有一些页面(在 Laravel 中),每个页面都包含一个具有不同操作 URI 的表单:
<form method="post" action="/route1">
...
<button @click="emitEvent('event1')">
</form>
在 Vuejs 根目录中,我只有一个全局调用事件的方法:
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,但是这样,如果条件为假并且window.location 没有运行,它就会卡住。
我正在考虑访问事件对象,然后手动 preventDefault() 但仅在必要时,所以如果不是这种情况,页面将从表单的操作中加载 url,但我找不到获取的方法Vue 中的那个事件对象。
我发现事件名称在 EventBus._events.event1 中,但我无法继续前进,因为只有空属性,我不确定如何访问默认事件以便阻止它。
我确信它必须是一种更简单/更短和更好的方法,然后为每个表单提供一个 id/class,然后访问它,然后获取它的 action 属性,这是我需要的 url,最后如果访问该 url,如果条件不满足。这样它可能会起作用,但它可能是一种旧风格?
无论如何,我在这里是堆栈,我很感激任何帮助。
【问题讨论】:
-
如何将点击事件移动到表单提交事件,然后返回false?
标签: javascript vue.js vuejs2 vue-component