Vue路由的模块自动化与统一加载实现


Posted in Javascript onJune 05, 2020

首先呢,我们来看看一般项目路由是怎么划分的。

Vue路由的模块自动化与统一加载实现

为什么这么划分呢?如果大项目业务非常多,单纯的单页面很难维护,我们只有这样规范化,才能高效率。

模块自动化与统一加载的好处:

  • 规范化命名(模块名.业务名.vue)
  • 不用每次写页面都要去总路由引入组件

接下来,我们实战一波。

一、建立项目文件目录以及文件夹

根据上面的要求建立,依次在src文件夹下的components文件夹下建立一个如名叫model1文件夹用于存放功能模块(可以分别创建多个模块文件夹,里面分别存放业务代码)。在该文件夹下创建components文件夹,用于存放组件。创建pages文件夹,用于存放页面。创建index.route.js,用于存放模块路由代码。

Vue路由的模块自动化与统一加载实现

二、编写模块路由

index.route.js文件下编写,

let router = require.context("./pages",true,/.vue/); // require.context()是webpack提供的方法,这个方法的第一个参数是require的一个文件夹,第二个参数是否遍历子目录,第三个参数是筛选什么类型的文件。
let arr = [];
// router是一个方法,直接调用会出错,router.keys()是router里的一个静态方法。
console.log(router.keys()); // ["./model1.index.vue", "./model1.second.vue"]
router.keys().forEach((key) => {
  let _keyarr=key.split("."); // 分割字符串。如"./model1.index.vue"
  if(key.indexOf("index")!=-1){ // 判断每一项字符串是否有index,有即首页
    arr.push({
      path:_keyarr[1],
      component:router(key).default, // 相当于import
      meta:{
        title:_keyarr[1].replace('/','') // 删除"/"
      }
    }) 
  }
  else{
    arr.push({
      path:_keyarr[1]+"/"+_keyarr[2],
      component:router(key).default,
      meta:{
        title:_keyarr[2]
      }
    })
  }
});
export default arr

三、编写总路由

找到router文件夹下的index.js文件

Vue路由的模块自动化与统一加载实现

import Vue from 'vue'
import Router from 'vue-router'

Vue.use(Router)

let router = require.context("../components",true,/\.route\.js/);
let arr=[];
router.keys().forEach((key) => {
 arr=arr.concat(router(key).default); // 拼接数组
});

export default new Router({
 routes: [
  ...arr // 展开数组
 ]
})

这样就完毕了,源代码地址

到此这篇关于Vue路由的模块自动化与统一加载实现的文章就介绍到这了,更多相关Vue路由模块自动化与统一加载内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
js注意img图片的onerror事件的分析
Jan 01 Javascript
加载 Javascript 最佳实践
Oct 30 Javascript
jQuery实现多按钮单击变色
Nov 27 Javascript
JavaScript对象属性检查、增加、删除、访问操作实例
Jul 08 Javascript
js省市区级联查询(插件版&无插件版)
Mar 21 Javascript
详解angular2实现ng2-router 路由和嵌套路由
Mar 24 Javascript
教你用Cordova打包Vue项目的方法
Oct 17 Javascript
Angular5.0 子组件通过service传递值给父组件的方法
Jul 13 Javascript
使用ECharts实现状态区间图
Oct 25 Javascript
JavaScript中关于base64的一些事
May 06 Javascript
js实现列表按字母排序
Aug 11 Javascript
NestJs使用Mongoose对MongoDB操作的方法
Feb 22 Javascript
Jquery滑动门/tab切换实现方法完整示例
Jun 05 #jQuery
详解JS函数防抖
Jun 05 #Javascript
Vuex的各个模块封装的实现
Jun 05 #Javascript
js实现表单项的全选、反选及删除操作示例
Jun 05 #Javascript
一篇文章带你使用Typescript封装一个Vue组件(简单易懂)
Jun 05 #Javascript
vscode 插件开发 + vue的操作方法
Jun 05 #Javascript
vue渲染方式render和template的区别
Jun 05 #Javascript
You might like
php统计文件大小,以GB、MB、KB、B输出
2011/05/29 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
PHP单例模式详解及实例代码
2016/12/21 PHP
浅谈PHP中类和对象的相关函数
2017/04/26 PHP
php输出反斜杠的实例方法
2019/09/19 PHP
解决tp5在nginx下修改配置访问的问题
2019/10/16 PHP
Chrome中模态对话框showModalDialog返回值问题的解决方法
2010/05/25 Javascript
Dojo 学习要点
2010/09/03 Javascript
用js传递value默认值的示例代码
2014/09/11 Javascript
JavaScript代码应该放在HTML代码哪个位置比较好?
2014/10/16 Javascript
AngularJS基础教程之简单介绍
2015/09/27 Javascript
JS平滑无缝滚动效果的实现代码
2016/05/06 Javascript
jQuery Ajax Post 回调函数不执行问题的解决方法
2016/08/15 Javascript
webpack4.0打包优化策略整理小结
2018/03/30 Javascript
微信小程序上传图片功能(附后端代码)
2020/06/19 Javascript
python复制与引用用法分析
2015/04/08 Python
pycharm远程调试openstack代码
2017/11/21 Python
Flask实现跨域请求的处理方法
2018/09/27 Python
python 随机森林算法及其优化详解
2019/07/11 Python
python3的print()函数的用法图文讲解
2019/07/16 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
2020/03/06 Python
阿里健康大药房:阿里自营网上药店
2017/08/01 全球购物
阿联酋彩妆品牌:OUD MILANO
2019/10/06 全球购物
英国豪华装饰照明品牌的在线零售商:Inspyer Lighting
2019/12/10 全球购物
保加利亚手表、香水、化妆品和珠宝购物网站:Brasty.bg
2020/04/22 全球购物
如果一个类实现了多个接口但是这些接口有相同的方法名将会怎样
2013/06/16 面试题
剪枝的学问教学反思
2014/02/07 职场文书
财产保全担保书范文
2014/04/01 职场文书
网络技术专业求职信
2014/05/02 职场文书
经济类毕业生求职信
2014/06/26 职场文书
安全生产标语大全
2014/10/06 职场文书
教师批评与自我批评发言稿
2014/10/15 职场文书
2015年新学期寄语
2015/02/26 职场文书
2015年学校体育工作总结
2015/04/22 职场文书
反腐倡廉影片观后感
2015/06/08 职场文书
推广普通话宣传标语口号
2015/12/26 职场文书