请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

vue中的全局前置路由守卫报错

在vue里,为什么使用了 $router.push() 的话,设置全局前置路由守卫(router.beforeEach)会报错,而转换成原生的window.location()就不会报错,另外,使用<router-link><a>这两个标签都没问题

代码如下:

<template>
  <header>
    <el-tabs v-model="active" @tab-click="handleClick">
      <el-tab-pane label="sports" name="sports" disabled></el-tab-pane>
      <el-tab-pane label="登录/注册" name="sub" value="sub"></el-tab-pane>
      <el-tab-pane label="用户管理" name="user" value="user" ></el-tab-pane>
      <el-tab-pane label="查询" name="search" value="search"></el-tab-pane>
      <el-tab-pane label="分类" name="classify" value="classify"></el-tab-pane>
      <el-tab-pane label="首页" name="main" value="main"></el-tab-pane>
    </el-tabs>
  </header>
</template>
<script>
export default {
  data(){
    return{
      active:"main"
    }
  },
  methods: {
    handleClick(tab){
      let url = tab.$vnode.data.attrs.value;
      console.log(url);
      let completeUrl = "/" + url;
      this.$router.push(completeUrl);
    }
  },

};
</script>

全局前置路由守卫代码如下:

router.beforeEach((to, from, next) => {
  let user = cookie.gcookie("form");
  let vens = cookie.gcookie("venuesForm");
  let admit = cookie.gcookie("admit");
  if (user || vens || admit) {
    next();
  } else if (
    to.name === "main" ||
    to.name === "Home" ||
    to.name === "Sub" ||
    to.name === "AdmitLog" ||
    to.name === "Admit") {
    next();
  } else {
    next({
      name: "Sub"
    })
  }
})

图片描述

正在回答

1回答

能把报错发上来咱们看一下吗?

0 回复 有任何疑惑可以回复我~
  • 提问者 夜下的猫 #1
    好的,报错图已经更改进去了,麻烦老师看一看
    回复 有任何疑惑可以回复我~ 2022-03-12 19:14:42
  • Dell 回复 提问者 夜下的猫 #2
    提示你了一下,如果首页要跳转,用redirect
    回复 有任何疑惑可以回复我~ 2022-03-12 19:29:33
  • 提问者 夜下的猫 回复 Dell #3
    那请问一下,为什么用redirect重定向就可以,push就不行了呢,重定向又为什么跟a标签和其他方法能效果一样呢
    回复 有任何疑惑可以回复我~ 2022-03-12 22:38:56
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号