Vue 动态路由

这篇具有很好参考价值的文章主要介绍了Vue 动态路由。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实现动态路由,需要解决3个核心功能

1、router.addRoute 方法加路由

2、动态集成路由componentName:() => import(`@/pages/${view}`)

3、刷新后动态路由丢失问题

总体思路:

1、定义一个store对象,这个是vue里面的全局对象,刷新后值会丢失

2、登录后把数据库的菜单调用router.addRoute加到路由中,然后把菜单存本地localstore

3、router.beforeEach 里面判断是否登录,且store对象里面的值是否为空,然后直接重新去localstore再绑定一次路由,调用next({ ...to, replace: true });重来即可

1、2的实现代码如下:

//绑定动态路由
router.initRouter=(menuList)=>{
  var routerConfig={ path: '/', name: 'home', component: () => import('@/layouts/PageLayout'),
    children: [
      { path: "/404", name: '404', component: () => import('@/common/error/404'),
        meta: {
          //原组件的名称
          componentName: "Page404",
          //不需要登录
          needLogin: false
        }
      },
    ]
  };
  //循环数据库的菜单
  for(var menu of menuList){
    //没有数据的不绑定
    if(menu.component_path==undefined || menu.component_path ==null || menu.component_path=="" || menu.component_path=="null"){
      continue;
    }
    routerConfig.children.push({
      path: menu.url,
      component: loadComponent(menu.component_path),
      meta: {
        componentName: menu.component_name
      }
    });
  }
  router.addRoute(routerConfig);
  router.addRoute({path: '*',redirect: '/404', hidden: true });
  //动态路由加载完成
  store.state.menu.dynRouterLoaded = true;
}
//路由的插件
const loadComponent = (view) => {
  if(view.substring(0,1)=="/"){
    view=view.substring(1);
  }
  if (process.env.NODE_ENV === 'development') {
    return (resolve) => require([`@/pages/${view}`], resolve)
  } else {
    // 使用 import 实现生产环境的路由懒加载
    return () => import(`@/pages/${view}`)
  }
}

解决刷新丢失路由文章来源地址https://www.toymoban.com/news/detail-651074.html


//路由前置守卫
router.beforeEach((to, from, next) => {
  NProgress.start();
  //有登录且没有路由的时候,手动绑定一次路由,解决刷新菜单丢失问题
  if(getAuthorization()!=null&& store.state.menu.dynRouterLoaded==false){
    var localMenus = localStorage.getItem(process.env.ADMIN_MENUS_KEY)
    if (localMenus != null) {
       router.initRouter(JSON.parse(localMenus));
    }else{
      router.initRouter([]);
    }
    next({ ...to, replace: true });
  }
  
  if (to.meta.needLogin == false) {
    //不需要登录
    return next();
  }
  //没有token直接去登录页面
  if(getAuthorization()==null){
    return next({path: "/login"});
  }
  const homeUrl = MenuUtil.getHomeUrl();
  //解决回退时进入首页的BUG
  if (to.path == process.env.PATH && homeUrl != "") {
    return next({ path: homeUrl });
  }
  next()
});

到了这里,关于Vue 动态路由的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【前端】在Vue2中使用Vanta.js炫酷动态背景(全屏背景)

    官网:https://www.vantajs.com/ 由于博主在参考官网及官方GitHub进行应用时遇到一些问题,因此写了该篇博客,以避免大家因找Bug而浪费时间,方便快速的应用。 注意版本 Vue的版本如下 “vue”: “^2.6.14” 渲染容器 导包 方法 完整代码: 完整代码: 参加颜色参数 如果报错:‘X

    2024年02月11日
    浏览(45)
  • 若依 vue前端 动态设置路由path不同参数 在页面容器里打开新页面(新路由),面包屑和标签页标题根据参数动态改变,面包屑多级标题,侧边栏对应菜单亮起

    因为是在vue源码的基础上进行修改,所以,就没有复制代码在文章上,采取的是截图对比源码和我修改的代码片段。要麻烦你们自己手敲了。 场景:在费用配置列表中,点击每一项的配置,都会在页面容器内部打开一个新页面,所以新页面的路径一样,根据传的参数不同,面

    2024年01月16日
    浏览(51)
  • 前端项目部署自动检测更新后通知用户刷新页面(前端实现,技术框架vue、js、webpack)——方案一:编译项目时动态生成一个记录版本号的文件

    当我们重新部署前端项目的时候,如果用户一直停留在页面上并未刷新使用,会存在功能使用差异性的问题,因此,当前端部署项目后,需要提醒用户有去重新加载页面。 vue、js、webpack 编译项目时动态生成一个记录版本号的文件 轮询(20s、自己设定时间)这个文件,判断版

    2024年02月02日
    浏览(57)
  • 路由原理及vue实现动态路由

    在前端开发中,路由通常用于实现 SPA 应用程序,即在一个页面中切换不同的内容或页面,而不需要重新加载整个页面。路由的实现原理是通过监听 URL 的变化,然后根据不同的 URL 加载不同的内容或页面。 在前端框架中,例如 Vue,路由通常是通过路由库来实现的。路由库提

    2024年02月06日
    浏览(40)
  • vue关于静态路由和动态路由:

    这篇文章写得超详细!!! 👉vue实现动态路由一步到位_vue动态路由怎么实现_ds_surk的博客-CSDN博客 目录 静态路由的配置: 步骤:  动态路由的配置: 步骤: 代码实现: 步骤2详解: 步骤3详解: 步骤4详解: 其他问题: 步骤:  1、router的index.js写几个页面—2、router的per

    2024年02月06日
    浏览(42)
  • 【Vue框架】Vue2中Vue.js路由—路由介绍、路由控制组件切换、路由重定向、路由传参、嵌套路由、路由布局(附源码详解)

    Vue Router官方文档 :https://router.vuejs.org/zh/installation.html 使用路由文件: 1.引用vue-router路由js文件 2.创建router对象 3.在vm对象中注册router对象 4.在视图中使用 router-view 标签 第一种传参形式——路由路径进行传参,如:/login?id=20 第二种传参形式——路由占位符进行传参,如:/

    2023年04月08日
    浏览(82)
  • 前端(四)——vue.js、vue、vue2、vue3

    😊博主:小猫娃来啦 😊文章核心: vue.js、vue、vue2、vue3从全局到局部 Vue.js是一款流行的JavaScript框架 vue,vue2,vue3都是vue.js的不同版本。 Vue:Vue.js的第一个版本,也称为Vue 1.x。它于2014年首次发布,并获得了广泛的应用和认可。 Vue2:Vue.js的第二个版本,也称为Vue 2.x。它在Vu

    2024年02月12日
    浏览(70)
  • vue路由动态加载

    目录 前言 一、动态路由是什么? 二、如何实现 1.登录时将获取的路由信息存入vuex 2.持久化处理 3.加载动态路由 总结 最近在学习vue3时,准备用vite+vue3弄一个后台管理系统,于是准备看看动态路由的实现方式。 动态路由,顾名思义是动态获取的,是可变的。我们可以根据不

    2024年02月10日
    浏览(29)
  • vue 路由动态加载

    在 Vue.js 中,可以使用 webpack 的动态导入语法来实现路由动态加载。下面是一个简单的示例: 在上面的代码中,我们使用了 ES6中动态导入语法 import() 来导入组件 。 在 import() 函数中,我们使用了 /* webpackChunkName: \\\"chunk-name\\\" */ 来指定每个组件的 chunk 名称。 这个语法告诉 webpa

    2024年02月11日
    浏览(27)
  • vue 实现动态路由

    vue-router对象中的 addRoutes ,用它来动态添加路由配置 格式: 举个例子: 我是以 vue-admin-template 为例,做如下演示: 在router/index.js中的路由配置中 只保留静态路由(因为我们要动态的添加)) 在permission.js中引入,并使用addRoutes动态添加 这个是 router 下的 index.js中定义的 静态

    2024年02月01日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包