Electron-vue第一章:创建和自动生成嵌套路由

# 安装 vue-cli 和 脚手架样板代码
npm install -g vue-cli
vue init simulatedgreg/electron-vue my-project

# 安装依赖并运行你的程序
cd my-project
yarn # 或者 npm install

cnpm install


运行
yarn run dev # 或者 npm run dev

 第一步:安装

第二步:填坑 

  根据提示cd my-project并安装依赖npm install,安装成功后使用npm run dev启动

  出现错误------

第一个错误由热刷新引起,现在安装默认是关闭的,所以要去打开它。

my-project\.electron-vue\dev-runner.js在69行,把注释打开,重新启动即可。

第二个错误,在my-project\src\renderer\main.js加入

process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true'

完成这些烦人的坑之后开始制作自动加载路由以及嵌套路由自动生成。

其他错误,Object.fromEntries is not a function

解决办法:安装polyfill-object.fromentries,在项目根目录执行命令

npm i polyfill-object.fromentries

然后在my-project\.electron-vue\ddev-client.js中引入

import 'polyfill-object.fromentries';

第三步:自动加载路由

//router/index.js
import Vue from 'vue'
import Router from 'vue-router'
import Layout from '@/components/Layout'
import Login from '@/components/login'
import Index from '@/components/home/index'
import Menus from '@/assets/menu.json' //获取菜单中文名称图标等信息
Vue.use(Router)

let routers = require.context('@/components', true, /\.vue$/).keys();
var allname = []; //文件夹目录名称
var allRouters = []; //children嵌套路由数据
var autoLoadRoutes = []; //最终路由
var maxlen = 0;
//去除重复数组的对象
export function deteleObject(obj) {
	var uniques = [];
	var stringify = {};
	for (var i = 0; i < obj.length; i++) {
		var keys = Object.keys(obj[i]);
		keys.sort(function(a, b) {
			return (Number(a) - Number(b));
		});
		var str = '';
		for (var j = 0; j < keys.length; j++) {
			str += JSON.stringify(keys[j]);
			str += JSON.stringify(obj[i][keys[j]]);
		}
		if (!stringify.hasOwnProperty(str)) {
			uniques.push(obj[i]);
			stringify[str] = true;
		}
	}
	uniques = uniques;
	return uniques;
}



//-------组合children路由-----------------------------------------------------

routers.forEach(r => {
	// var name = r.replace(/^\.\//, '').replace(/\.\w+$/, '').split("/");
	// var Aname = name[1];
	var realr = r.replace(/^\.\//, '').replace(/\.\w+$/, '');
	var name = realr.split("/");

	var sname = name[0];
	var cname = name[1];
	if (name != "login" && name != "Layout") {
		//获取子文件夹内vue文件加入数组
		var objs = {
			path: '/' + name[1],
			name: name[1],
			component: require("@/components" + r.substr(1)).default,
			meta: {
				title: Menus.apmenu[cname],
			}
		};
		var key = name[0];
		//根据文件夹名称重新组成children嵌套内容
		if (Array.isArray(allRouters[key])) {
			allRouters[key].push(objs);
		} else {
			allRouters[key] = [objs];
		}
		if (key != "home") {
			allname.push({
				filename: key
			})
		}
	}
})

var allnames = deteleObject(allname) //去掉重复名称


//完成路由组合
for (var i = 0; i < allnames.length; i++) {
	var name = allnames[i].filename;
	if (allRouters[name].length == 1) {
		autoLoadRoutes.push({
			path: "/" + name,
			name: name,
			component: Layout,
			meta: {
				requiresAuth: true //路由拦截
			},
			children: allRouters[name]
		})
	} else {
		autoLoadRoutes.push({
			path: "/" + name,
			name: name,
			leaf: true, //二级路由
			meta: {
				title: Menus.apmenu[name],
				icon: Menus.apicon[name],
				requiresAuth: true //路由拦截
			},
			component: Layout,
			children: allRouters[name]
		})
	}
}


//把autoLoadRoutes路由信息加入并注册路由
export default new Router({
	mode: 'hash',
	routes: [{
			path: '/',
			hidden: true, //不在导航显示
			component: Layout,
			redirect: '/index'
		},
		{
			path: '/login',
			name: 'Login',
			hidden: true,
			component: Login,
			meta: {
				title: 'Login',
				name: 'Login',
			}
		},
		{
			//一级菜单
			path: '/home',
			component: Layout,
			name: 'home',
			redirect: '/index',
			children: [{
				path: '/index',
				name: 'index',
				component: Index,
				meta: {
					title: "首页",
					name: 'index',
					comp: Index, //tab获取路由地址
					icon: "el-icon-s-platform",
					requiresAuth: true //登录拦截
				}
			}]
		},
		...autoLoadRoutes
	]
})



// export default router //注册路由

// console.log(router) //打印路由

以上便是路由所有代码,输出一下。

 所有我们需要的路由都已经完美呈现。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悍司命

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值