Icce___ 2020-07-27 16:34 采纳率: 66.7%
浏览 3700
已采纳

vue-router 重置路由resetRouter方法定义后找不到

项目使用vue-router动态加载后端传过来的菜单,拼接后赋值给路由。现在由于在用户注销的时候没有resetRouter导致权限不同的用户切换,会出现路由权限错乱的问题。
网伤查了下资料,发现要调用resetRouter方法。
这是定义的router.js文件

import Vue from 'vue'
import Router from 'vue-router'
import store from '../store.js'
Vue.use(Router)
const originalPush = Router.prototype.push
Router.prototype.push = function push(location) {
  return originalPush.call(this, location).catch(err => err)
}
export let routes = [{
        path: '/login',
        name: 'login',
        meta: {
            requireAuth: false
        },
        component: (resolve) => require(['@/single/Login.vue'], resolve)
    },{
        path: '/share',
        name: 'share',
        meta: {
            requireAuth: false
        },
        component: (resolve) => require(['@/single/ShareView.vue'], resolve)
    },{
        path: '/template',
        name: 'template',
        meta: {
            requireAuth: false
        },
        component: (resolve) => require(['@/template/Index.vue'], resolve)
    }
]

const createRouter = () => new Router({
    routes: routes
})
const router = createRouter()

//写一个重置路由的方法,切换用户后,或者退出时清除动态加载的路由
export function resetRouter() {
    const newRouter = createRouter()
    router.matcher = newRouter.matcher // 新路由实例matcer,赋值给旧路由实例的matcher,(相当于replaceRouter)
}
//不需要权限的白名单path
const whiteList = ['/login', '/share','/template']

// 拦截登录,token验证
router.beforeEach((to, from, next) => {
    //代码省略
})

function mergeRoutes(routerList) {
    //代码省略
}
export default router

我在登陆或者注销的地方使用

this.$router.resetRouter();

还是

import router from './router.js'
router.resetRouter();

都会报对象没有这个方法。
然后把对象打印出来就如下图

图片说明

求助一下大家,是我router引用错了吗?还是哪里配置有问题?

  • 写回答

5条回答 默认 最新

  • 封印di恶魔 2020-07-27 16:52
    关注

    你定义的resetRouter又不是你router对象的一个方法,是单独export的方法

    import {resetRoute} from './router.js'
    resetRoute()
    

    这样调用才对

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵