vue自动路由生成

标题vue-cli自动路由生成

在写vue的项目中,一般情况下我们每添加一个新页面都得添加一个新路由。为此我们在项目中会专门的一个文件夹(router)来管理路由,在一个大型项目中,会根据需要配置对应的路由规则,而对应的路由规则对应一个vue文件路径,所以我们的文件夹和路由是完全能够对应上的,只要知道路由,就能很快的找到对应的文件。那么有没有办法能够读取我们二级目录下的所有文件,然后根据文件名来生成路由呢?答案是有的

原理require.context

webpack就提供了一个context方法来获取到目录下的所有文件。

  • 官方文档require.context

简单说就是:有了require.context,我们可以得到指定文件夹下的所有文件

语法:
require.context(directory, useSubdirectories = true, regExp = /^\.\/.*$/, mode = 'sync');

示例1:
require.context('./test', false, /\.test\.js$/);
//(创建出)一个 context,其中文件来自 test 目录,request 以 `.test.js` 结尾。

示例2:
require.context('../', true, /\.stories\.js$/);
//(创建出)一个 context,其中所有文件都来自父文件夹及其所有子级文件夹,request 以 `.stories.js` 结尾。

require.context有三个参数:

  • directory:说明需要检索的目录
  • useSubdirectories:是否检索子目录
  • regExp: 匹配文件的正则表达式

require.context()的返回值,有一个keys方法,返回的是个数组:

const files = require.context('./components/', false, /\.vue$/);
let paths = files.keys();

通过上面的代码,我们打印出了所有的views文件夹下的所有文件和文件夹,我们只要写好正则就能找到我们所需要的文件 。

实际使用

1、首先在需要自动生成路由的目录下新建page.js

// 1、首先获取当前目录下所有的文件;
///2、然后筛选出所有的vue文件;
const files = require.context('./', false, /\.vue$/);

const pages = {};

files.keys().forEach((key) => {
  ///3、通过正则将文件名作为属性名来保存文件
  pages[key.replace(/(\.\/|\.vue)/g, '')] = files(key).default;
});

export default pages;

2、然后再route目录中新建routers.js文件来生成实际可用的路由数组

import pages from '@/components/pages.js'; // 页面文件目录

let routes = [];

// 通过内置对象Object的keys方法来生成vue可用的路由数组
Object.keys(pages).forEach((item) => {
  routes.push({
    path: `/${pages[item].name}`,

    name: pages[item].name,

    component: pages[item],
  });
});

export default routes;

3、将生成的路由数组引入vue路由配置中

// 1、引入路由数组
import routerList from './routers';

const routes = [
  ...routerList, // 将路由数组合并到vue路由配置中
  {
    path: '/',
    name: 'Home',
    component: Home,
  },
  {
    path: '/about',
    name: 'About',
    component: () =>
      import('../views/About.vue'),
  },
];

最终生成路由如下:

这样一个简单的路由自动生成的功能就实现了~
注意:
1、要路由的页面一定要设置name属性;
2、消除严格模式,在项目根目录下新建.eslintignore文件,加一个“src/*”即可

可以拓展问题:
1、需要路由的页面并不在同一个目录下,如何获取文件;
2、并不是所有vue文件都是路由页面,如何筛选;
3、自动生成路由如何设置参数;

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值