vue路由分文件拆分管理详解


Posted in Javascript onAugust 13, 2020

这里说的路由拆分指的是将路由的文件,按照模块拆分,这样方便路由的管理,更主要的是方便多人开发。具体要不要拆分,那就要视你的项目情况来定了,如果项目较小的话,也就一二十个路由,那么是拆分是非常没必要的。但倘若你开发一些功能点较多的商城项目,路由可以会有一百甚至几百个,那么此时将路由文件进行拆分是很有必要的。不然,你看着index.js文件中一大长串串串串串串的路由,也是很糟糕的。

首先我们在router文件夹中创建一个index.js作为路由的入口文件,然后新建一个modules文件夹,里面存放各个模块的路由文件。例如这里储存了一个vote.js投票模块的路由文件和一个公共模块的路由文件。下面直接上index.js吧,而后在简单介绍:

import Vue from 'vue'
import Router from 'vue-router'
 
// 公共页面的路由文件
import PUBLIC from './modules/public' 
// 投票模块的路由文件
import VOTE from './modules/vote' 
 
Vue.use(Router)
 
// 定义路由
const router = new Router({ 
  mode: 'history', 
  routes: [  
    ...PUBLIC,  
    ...VOTE, 
  ]
})
 
// 路由变化时
router.beforeEach((to, from, next) => {  
  if (document.title !== to.meta.title) {    
    document.title = to.meta.title;  
  }  
  next()
})
 
// 导出
export default router

首先引入vue和router最后导出,这就不多说了,基本的操作。

这里把router.beforeEach的操作写了router的index.js文件中,有些人可能会写在main.js中,这也没有错,只不过,个人而言,既然是路由的操作,还是放在路由文件中管理更好些。这里就顺便演示了,如何在页面切换时,自动修改页面标题的操作。

而后引入你根据路由模块划分的各个js文件,然后在实例化路由的时候,在routes数组中,将导入的各个文件通过结构赋值的方法取出来。最终的结果和正常的写法是一样的。

然后看下我们导入的vote.js吧:

/** 
 * 投票模块的router列表 
 */
 
export default [  
  // 投票模块首页  
  {    
    path: '/vote/index',    
    name: 'VoteIndex',    
    component: resolve => require(['@/view/vote/index'], resolve),    
    meta: {      
      title: '投票'    
    }  
  },  
  // 详情页  {    
  path: '/vote/detail',    
  name: 'VoteDetail',    
  component: resolve => require(['@/view/vote/detail'], resolve),
  meta: {      
    title: '投票详情'    
  }  
}]

这里就是将投票模块的路由放在一个数组中导出去。整个路由拆分的操作,不是vue的知识,就是一个es6导入导出和结构的语法。具体要不要拆分,还是因项目和环境而异吧。

这里的路由用到了懒加载路由的方式,如果不清楚,文字上面有介绍到。

还有这里的meta元字段中,定义了一个title信息,用来存储当前页面的页面标题,即document.title。

补充知识:vue的自动化路由+分模块管理+路由懒加载

近期单独做了一个系统项目,项目不大但是页面太多了,为了后期维护管理容易,做了个自动化加载路由以及模块化的管理。在此记录一下。

直接撸代码

1.首先看目录

vue路由分文件拆分管理详解

router下的index.js是路由配置文件。

views下每个目录为一个模块,目录下每个pages文件夹存放页面。每个模块有一个单独的.router.js去管理。

2.先以asupmatset.router.js为例子

const arr= [];
function importPages(r, arr) {
 r.keys().forEach((key) => {
  let _keyarr = key.split(".");
  let _path = _keyarr[1];
 
  if (_keyarr[2] === "param") {
   _path = _keyarr[1] + "/:row";
  }
  arr.push({
   path: _path,
   name: _keyarr[1].substring(1, _keyarr[1].length + 1),
   component: () => r(key),
  });
 });
}
fun(require.context("./pages", true, /\.vue$/, "lazy"), arr);
export default arr;

3.再到路由文件index.js

//检索每一个模块router.js中的路由
var r=require.context("../views",true,/\.router\.js/)
var arr=[];
r.keys().forEach((key)=>{
 arr=arr.concat(r(key).default);
})
 
var router = new Router({
 routes: [
  //加入我们拿到的arr数组
  ...arr
 ]
})
 
export default router

完成~

以上这篇vue路由分文件拆分管理详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Enter回车切换输入焦点实现思路与代码兼容各大浏览器
Sep 01 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
Sep 22 Javascript
jQuery中animate用法实例分析
Mar 09 Javascript
Zabbix添加Node.js监控的方法
Oct 20 Javascript
Angular2利用组件与指令实现图片轮播组件
Mar 27 Javascript
vue2组件实现懒加载浅析
Mar 29 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
Apr 21 jQuery
浅谈webpack 自动刷新与解析
Apr 09 Javascript
vue操作下拉选择器获取选择的数据的id方法
Aug 24 Javascript
微信小程序使用map组件实现检索(定位位置)周边的POI功能示例
Jan 23 Javascript
实例讲解JS中pop使用方法
Jan 27 Javascript
layui.use模块外部使用其内部定义的js封装函数方法
Sep 16 Javascript
Postman环境变量全局变量使用方法详解
Aug 13 #Javascript
vue 实现把路由单独分离出来
Aug 13 #Javascript
vue项目接口域名动态获取操作
Aug 13 #Javascript
vue接通后端api以及部署到服务器操作
Aug 13 #Javascript
vue打包npm run build时候界面报错的解决
Aug 13 #Javascript
解决vue项目,npm run build后,报路径错的问题
Aug 13 #Javascript
vue项目接口管理,所有接口都在apis文件夹中统一管理操作
Aug 13 #Javascript
You might like
聊天室php&mysql(二)
2006/10/09 PHP
Apache下禁止php文件被直接访问的解决方案
2013/04/25 PHP
php连接oracle数据库及查询数据的方法
2014/12/29 PHP
Docker 如何布置PHP开发环境
2016/06/21 PHP
js中获取事件对象的方法小结
2011/03/13 Javascript
jquery.combobox中文api和例子,修复了上面的小bug
2011/03/28 Javascript
纯JS实现旋转图片3D展示效果
2015/04/12 Javascript
javascript数组去重方法汇总
2015/04/23 Javascript
JavaScript数组和循环详解
2015/04/27 Javascript
js实现精美的图片跟随鼠标效果实例
2015/05/16 Javascript
浅谈Web页面向后台提交数据的方式和选择
2016/09/23 Javascript
vue.js实例todoList项目
2017/07/07 Javascript
JS实现提交表单前的数字及邮箱校检功能
2017/11/13 Javascript
说说如何使用Vuex进行状态管理(小结)
2019/04/14 Javascript
详解vue中移动端自适应方案
2019/05/05 Javascript
element-ui组件中input等的change事件中传递自定义参数
2019/05/22 Javascript
javaScript把其它类型转换为Number类型
2019/10/13 Javascript
ES5新增数组的实现方法
2020/05/12 Javascript
JS可断点续传文件上传实现代码解析
2020/07/30 Javascript
Vue中inheritAttrs的使用实例详解
2020/12/31 Vue.js
详解python单元测试框架unittest
2018/07/02 Python
pygame游戏之旅 按钮上添加文字的方法
2018/11/21 Python
python为什么要安装到c盘
2020/07/20 Python
Python使用pycharm导入pymysql教程
2020/09/16 Python
python爬虫工具例举说明
2020/11/30 Python
CSS改变网页中鼠标选中文字背景颜色例子
2014/04/23 HTML / CSS
草莓网英国官网:Strawberrynet UK
2017/02/12 全球购物
TripAdvisor越南:全球领先的旅游网站
2017/09/21 全球购物
马来西亚领先的在线礼品店:Giftr
2018/08/23 全球购物
外企财务年会演讲稿
2014/01/03 职场文书
2014年高三毕业生自我评价
2014/01/11 职场文书
小学安全教育材料
2014/02/17 职场文书
篮球赛口号
2014/06/18 职场文书
2015年网络舆情工作总结
2015/07/24 职场文书
阳光体育运动标语口号
2015/12/26 职场文书
python manim实现排序算法动画示例
2022/08/14 Python