1. demo工程地址:https://github.com/martSforever/test-router
  2. 先说一下特性:
    1. 无需注册页面路由,可直接跳转;
    2. 页面地址可以在数据库中配置;
    3. 页面分包加载,进行页面路由跳转的时候才去加载页面组件代码;
    4. 可配置页面缓存或者不缓存
  3. 老样纸,先看效果图
  4. 原理说明:
    1. 首先是分包加载,当我们根据页面地址进行跳转的时候,首先根据这个页面地址去加载页面import('src/page' + path + '-page.vue').then(module=>console.log(module.default))
      加载文件得到的module.default就是vue组件;其中我们只对src/page目录下的以-page.vue结尾的文件进行分开打包以及按需引入,其他的当做页面公共组件按需引入;
    2. 得到component之后,动态注册路由:
      const route = {name: path, path: path, component: module.default}
      /*添加路由信息*/
      this.$router.options.routes.push(route)
      this.$router.addRoutes([route])
      
    3. 注册完之后就可以跳转了:
      this.$router.push({path, query})
  5. 缺点:
    1. 目前这个demo只能配置一级路由,如果需要更多更复杂的配置多级路由等,请自行完善;

核心代码main.js

import Vue from 'vue'
import VueRouter from 'vue-router'
import App from './App.vue'Vue.use(VueRouter)
const router = new VueRouter({routes: []})Vue.config.productionTip = falseVue.prototype.$lv = {$router: router,push(path, query) {/*路由跳转*/const next = () => this.$router.push({path, query})if (this.$router.options.routes.some(route => route.name === path)) {next()} else {/*页面分开打包,按需加载,只打包以page结尾的.vue文件,不以page结尾的表示页面公共的组件,分开打包,按需引入*/import('src/page' + path + '-page.vue').then(module => {const route = {name: path, path: path, component: module.default}/*添加路由信息*/this.$router.options.routes.push(route)this.$router.addRoutes([route])next()})}},back() {window.history.back()}
}new Vue({router,render: h => h(App),beforeCreate() {if (this.$route.path !== '/') {this.$lv.push(this.$route.path)}},
}).$mount('#app')

核心页面App.vue

<template><div id="app"><div class="header"><!--这里可以理解为从后台数据库中配置的菜单地址,无需注册--><button @click="$lv.go('/student/student',{name:'hello world'})">打开学生页面</button><button @click="$lv.go('/student/student-detail')">打开学生详情页面</button><button @click="$lv.go('/teacher/teacher')">打开老师页面</button></div><div class="page"><!--页面不缓存(路由跳转之后会销毁页面vue实例,重新跳转回此路由会重新初始化页面)--><router-view></router-view><!--页面缓存(路由跳转,切换回来的时候页面仍然没有变化)--><!--<keep-alive><router-view></router-view></keep-alive>--></div></div>
</template><script>import HelloWorld from './components/HelloWorld.vue'export default {name: 'app',components: {HelloWorld},}
</script><style>#app {}.page {height: 100px;background-color: #f2f2f2;}
</style>

工程目录结构:

页面懒加载效果图:

vue-router动态注册路由,实现无需注册页面可跳转相关推荐

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

    前言 因为是在vue源码的基础上进行修改,所以,就没有复制代码在文章上,采取的是截图对比源码和我修改的代码片段.要麻烦你们自己手敲了. 先来看看效果: 场景:在费用配置列表中,点击每一项的配置,都会在 ...

  2. Vue Router系列之路由懒加载

    文章の目录 一.具体需要 3 步: 1.安装 `@babel/plugin-syntax-dynamic-import` 包. 2.在 babel.config.js 配置文件中声明该插件. 3.将路 ...

  3. Vue Router系列之路由重定向

    文章の目录 一.什么是路由重定向 二.示例 写在最后 一.什么是路由重定向 路由重定向指的是:用户在访问地址 A 的时候,强制用户跳转到地址 C,从而展示特定的组件页面:通过路由规则的 redirec ...

  4. Vue项目中使用 路由导航守卫 处理页面的访问权限

    参考Vue-Router官方文档 Vue-Router导航守卫 效果展示 1.给需要登录状态才能访问的页面路由对象的 meta 中添加配置属性 { // 小智同学name: 'user-chat',p ...

  5. React router 4 获取路由参数,跨页面参数

    1. match通过路径 <Route path="/path/:name" component={example} /> 路由组件内获取参数使用 this.props ...

  6. Vue中路由管理器Vue Router使用介绍(三)

    2019独角兽企业重金招聘Python工程师标准>>> 一.路由定义添加动态参数定义 1.路由定义项,使用:xx 方式 定义动态参数 {path:'/user/:id/:name', ...

  7. Vue Router 实现路由控制实战

    本文是我在学习过程中记录学习的点点滴滴,目的是为了学完之后巩固一下顺便也和大家分享一下,日后忘记了也可以方便快速的复习. Vue Router 实现路由控制实战 前言 一.什么是单页面应用及实现前端路 ...

  8. 【Vue】相关生态——Vue Router路由

    Vue Router路由 基本使用 带参数的动态路由匹配 捕获所有路由或404 Not found 路由 嵌套路由 编程式导航 重定向和别名 将props传递给路由组件 不同的历史模式 进阶 导航守卫 ...

  9. Vue 学习(十、 Vue Router - 路由插件 和 Vue 的插件原理)

    文章目录 一.Vue Router - 路由插件 1. 安装 Vue Router 2. Vue Router 路由的基本使用 3. 设置 router-link 4. 编程式路由 5. 路由嵌套 6 ...

  10. Vue Router路由常用功能总结

    Vue Router路由常用功能总结 一.前言 二.安装 1. vueCLI安装 2. npm安装 三.路由配置及使用: 1. 基本配置: 2. 动态路由: 3. 嵌套路由: 四.编程式的导航 五.重 ...

最新文章

  1. Android给自定义按键添加广播和通过广播给当前焦点输入框赋值
  2. Paper之BigGAN:ICLR 2019最新论文《LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS》(未完待续)
  3. css3 选择器_CSS 3
  4. 在IDEA中关于项目java版本问题
  5. CSocket文件传输 分段传输的关键代码
  6. JSFL 获取当前脚本路径,执行其他脚本
  7. 高德地图看各省分界线_深度解读|高德宣布高精地图“百元时代”背后的商业逻辑是什么...
  8. 关于toString()与toLocaleString()的区别
  9. hadoop连接远程mysql_MySQL设置远程连接
  10. 矩阵分析 (八) 矩阵的直积
  11. Ruby on rails 实战圣经:Ruby程序语言入门
  12. arcgis 将2000球面坐标转换成平面坐标
  13. js中输出2000~2100年之间所有的闰年;
  14. 如何在linux下解压缩rar和zip格式的文件压缩包
  15. SQL效率低下常见原因汇总
  16. 双十一有哪些电容笔值得入手?十大电容笔知名品牌
  17. jenkins忘记账号密码,元芳,你怎么看?
  18. Centos服务器java环境初始化搭建
  19. ARM SIMD 指令集:NEON 简介
  20. java mail 邮箱发送_Java Mail 发送邮件

热门文章

  1. ensp 进入交换机子接口、让子接口认识vlanid的数据帧、开启路由器的arp广播:实现pc之间的通信。
  2. openinstall与方太集团达成合作助力高端智慧厨电运营
  3. 建立一个程序员相亲圈子可好
  4. 回归问题评估模型的三个指标
  5. 上午还在写Bug,下午突然“被离职”,咋整?
  6. C语言中排序函数的用法
  7. 外嫁美的被指违约 东芝创维合作或重谈
  8. vs单步调试及断点调试基本介绍(入门版详细图文介绍)
  9. Cinema 4D R19 安装教程【64位】
  10. Win10配置SlowFast全过程并使用slowfast进行视频行为识别检测