vue.js - 奇怪的 VueJS 路由行为

标签 vue.js vue-router

我的路由有问题。我有一个简单的点击处理程序可以推送到路由器。

methods: {
   page(path) {
      this.$router.push(path);
   }
}

这将显示正确的内容,但 URL 短暂转到正确的 URL,然后返回到上一个 URL。我只是知道它发生了,因为当我单击“后退”浏览器按钮时,URL 是正确的。

我打开控制台并决定测试路由器

$vm0.$router.push('/my-path');

不仅显示了正确的内容,而且 URL 也正确。

我现在很困惑如何进一步调试它,所以如果有人有任何想法请告诉我。

路由器.js

import VueRouter from 'vue-router';

const routes = [
    { path: '/', component: require('./views/Campaigns').default },
    { path: '/foo', component: require('./views/Foo').default },
    { path: '/campaign/edit', component: require('./views/EditCampaign').default },
];

export default new VueRouter({
    routes
});

main.js

import Vue from 'vue'
import VueRouter from 'vue-router';
import router from './routes';

Vue.config.productionTip = false;
Vue.use(VueRouter);

new Vue({
  el: '#app',
  router
});

问候

最佳答案

您将点击事件附加到 <a>元素,因此您需要阻止默认的点击行为,即跟随链接。

您可以通过两种方式实现这一目标:

<强>1。使用事件修饰符

To address this problem, Vue provides event modifiers for v-on. Recall that modifiers are directive postfixes denoted by a dot.

<a @click.prevent="page('/foo')">Button</a>

<强>2。使用事件处理程序

如果您需要访问事件对象:

<a @click="page('/foo', $event)">Button</a>
page(path, e) {
  e.preventDefault()
  this.$router.push(path)
}

这也可能适用于其他类型元素上的单击事件,例如表单内的按钮。 Source

关于vue.js - 奇怪的 VueJS 路由行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60296975/

相关文章:

javascript - 将 Vue 对象附加到元素的最推荐语法是什么?

javascript - 绑定(bind) src 时视频或 iframe 标签无法正常工作

javascript - 在一页中堆叠 vuetify 元素

javascript - 如何在 Vue 3 中使用路由器 View 制作某些组件 "keep-alive"?

javascript - 获取json数据时如何去掉promise

vue.js - NuxtJS 更改查询参数并重新加载页面

javascript - 将 Vue 查询参数从当前路由传递到 router-link

javascript - Vuex模块: Can't use mapActions

vue.js - Vue-router:循环路由以动态创建 <r​​outer-link>

vue.js - 如何从 Vue.js 中的外部文件访问数据?