vue项目实际开发的问题及实用技巧分享(三:路由拆分优化)

前两篇文章内容是针对具体组件和业务内容部分,本篇就讲讲vue项目路由模块的优化技巧和方式

首先来看下我们初始构建vue-cli项目时原本的router/index.js文件

import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld
    },
		
  ]
})

沿着这个逻辑我们再新增一个组件就在router里引入对应的组件,现在在src文件下新建我们的业务模块文件夹pages,然后在pages下新建main/index文件并把页面挂载到’/main’路由上

import Main from '@/pages/main'
	{
	  path: '/main',
	  name: 'Main',
	  component: Main
	}

如果我们这个main涉及的业务非常繁杂,我们就得不断在main文件下不断加组件然后挂在/main路由下

 然后我们引用就得不断在/main下加children子项

import Child1 from '@/pages/main/mainChild/index1'
import Child2 from '@/pages/main/mainChild/index2'
import Child3 from '@/pages/main/mainChild/index3'

	{
	  path: '/main',
	  name: 'Main',
	  component: Main,
	  children:[
		  {
			  path: '/main/child1',
			  name: 'mainChild1',
			  component: Child1
		  },
		  {
			  path: '/main/child2',
			  name: 'mainChild2',
			  component: Child2
		  },
		  {
			  path: '/main/child3',
			  name: 'mainChild3',
			  component: Child3
		  },
	  ]
	}

现在我们再加入其他业务mine,car等,再看看router/index内容

import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
import Forms from '@/pages/forms'
import Login from '@/pages/login'
import Main from '@/pages/main/index'
import Child1 from '@/pages/main/mainChild/index1'
import Child2 from '@/pages/main/mainChild/index2'
import Child3 from '@/pages/main/mainChild/index3'
import Car from '@/pages/car/index'
import CarChild1 from '@/pages/car/mainChild/index1'
import CarChild2 from '@/pages/car/mainChild/index2'
import CarChild3 from '@/pages/car/mainChild/index3'
import Mine from '@/pages/mine/index'
import MineChild1 from '@/pages/mine/mainChild/index1'
import MineChild2 from '@/pages/mine/mainChild/index2'
import MineChild3 from '@/pages/mine/mainChild/index3'


import forms from '@/pages/forms'
Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld
    },
	{
	  path: '/main',
	  name: 'Main',
	  component: Main,
	  children:[
		  {
			  path: '/main/child1',
			  name: 'mainChild1',
			  component: Child1
		  },
		  {
			  path: '/main/child2',
			  name: 'mainChild2',
			  component: Child2
		  },
		  {
			  path: '/main/child3',
			  name: 'mainChild3',
			  component: Child3
		  },
	  ]
	},,
	{
	  path: '/car',
	  name: 'Car',
	  component: Car,
	  children:[
		  {
			  path: '/car/child1',
			  name: 'CarChild1',
			  component: CarChild1
		  },
		  {
			  path: '/car/child2',
			  name: 'CarChild2',
			  component: CarChild2
		  },
		  {
			  path: '/car/child3',
			  name: 'CarChild3',
			  component: CarChild3
		  },
	  ]
	},
	{
	  path: '/mine',
	  name: 'Mine',
	  component: Mine,
	  children:[
		  {
			  path: '/mine/child1',
			  name: 'MineChild1',
			  component: Child1
		  },
		  {
			  path: '/mine/child2',
			  name: 'MineChild2',
			  component: Child2
		  },
		  {
			  path: '/mine/child3',
			  name: 'MineChild3',
			  component: Child3
		  },
	  ]
	},
	{
	  path: '/forms',
	  name: 'forms',
	  component: Forms
	},
	{
	  path: '/login',
	  name: 'login',
	  component: Login
	},
		
  ]
})

如果业务不复杂,组件极少的情况下,这样写也OK,但是通常情况下,我们实际的项目业务内容复杂,几个组件是根本不可能处理完所有的业务逻辑,会产出大量的业务组件。

如果都这样写,会大大提高我们的维护成本,而且由于每个vue文件使用import导入时会自动加载,会增加性能开销,而且这样写由于路由列表太长,不同模块的路由都凑在了一起,对单页面应用的Vue 来说,这样使用 webpcak 打包后的文件很大,当进入首页时,加载的资源过多,页面会出现白屏的情况,不利于用户体验。针对这些问题我们就需要对router/index内容进行优化处理

首先,使用路由懒加载来引入各个路由模块,把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应的组件,这样就会更加高效

{path: '/',name: 'HelloWorld', component: ()=>import('@/components/HelloWorld')},

然后,对各个不同业务类型的路由对应组件进行拆分,新增modules文件,将拆分后的路由放入

 再在router/index分别引入

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

import main from './modules/main'
import car from './modules/car'
import mine from './modules/mine'
Vue.use(Router)
console.log(car)
export default new Router({
  routes: [
    {path: '/',name: 'HelloWorld', component: ()=>import('@/components/HelloWorld')},
	main,
	car,
	mine		
  ]
})

这样一个简单的分离就完成了,但是这样写后续的业务代码加一个就得引入一个,原则上基础路由是不让后续再加入当然最好,我们可以将router/index.js作为一个基础路由,后续的模块自动加入。我们再新增一个路由中转allWork.js来处理

allWork.js

/* 
路由配置地址 
---------------
动态引入加载路由模块,用动态导入代替静态导入

注意: 
路由不要放在router文件下的index里面了
路由导入不要再直接使用import引入
---------------
*/
const modulesFiles = require.context('./modules', true, /\.js$/)

const modules = modulesFiles.keys().reduce((modules, modulePath) => {
	const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1')
	const value = modulesFiles(modulePath)
	modules[moduleName] = value.default

	return modules
}, {})
let allRouter =[]
let keys = Object.keys(modules)
for (let key of keys) {
	let v = modules[key]
	if(Array.isArray(v)){//加入路由模块js为数组
		modules[key].forEach(i=>{
			allRouter.push(i)
		})
	}else{
		allRouter.push(modules[key])
	}
}

export default [
	...allRouter,
]

router/index.js

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

import allRoutes from './allWork'
Vue.use(Router)
/**
   * 如果非全局使用页面  请不要在这里添加任何路由
   * 添加路由 --> allWork.js文件内添加
*/
export default new Router({
  routes: [
    {path: '/',name: 'HelloWorld', component: ()=>import('@/components/HelloWorld')},
	...allRoutes,		
  ]
})
注:require.context用于模块的批量导入,类同于import引入同一文件夹下多个文件
参数(directory,useSubdirectories,regExp)
1.directory: 读取文件的路径
2.useSubdirectories: 是否遍历文件的子目录 
3.regExp: 匹配文件的正则表达式
其返回是一个函数,是该文件夹下的匹配文件的执行环境

以上就是个人对vue路由的一些简单优化,希望大家多多指正

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
开发 Vue2 项目时,有几个实用技巧可以帮助你提高开发效率和代码质量。以下是一些建议: 1. 使用单文件组件(Single File Components):单文件组件将模板、样式和逻辑组织在一个文件中,使代码更具可读性和维护性。你可以使用.vue文件来创建单文件组件。 2. 利用计算属性(Computed Properties):计算属性允许你基于现有的响应式数据进行计算,并在模板中使用它们。这样可以减少模板中的逻辑处理,使代码更简洁清晰。 3. 使用 Vuex 进行状态管理:Vuex 是 Vue 的官方状态管理库,它可以帮助你在应用程序中管理和共享状态。当应用程序的状态变得复杂时,使用 Vuex 可以更好地组织和管理状态。 4. 组件化开发Vue2 采用组件化的开发方式,可以将页面拆分成多个组件,每个组件负责自己的功能和样式。这样可以提高代码重用性和可维护性。 5. 使用指令(Directives):Vue2 提供了许多内置指令,如 v-if、v-for、v-bind 和 v-on,它们可以简化模板中的常见操作。了解并合理使用这些指令可以提高代码的可读性和可维护性。 6. 过滤器(Filters):Vue2 允许你在模板中使用过滤器对数据进行格式化。过滤器可以在显示数据之前对其进行处理,例如格式化日期、转换文本等。 7. 优化性能:在开发 Vue2 项目时,要注意优化性能。可以使用懒加载、异步组件、路由懒加载等技术来减少页面的加载时间和资源占用。 8. 及时销毁事件监听和定时器:在组件销毁时,要确保及时销毁事件监听和清除定时器,以避免内存泄漏和性能问题。 希望这些技巧对你有帮助!如果你有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值