代码拉取完成,页面将自动刷新
最近项目开发完毕,终于抽出点时间来优化一下代码,这里重点介绍路由的优化
我们搭建vue项目的时候基本上都是从vue-cli中clone后修改的,我们的路由一般写在一个 router.js中
问题来了,随着业务进一步推进,页面文件的增加,导致router.js这个文件越来越大。
带来的危害:1.不方便维护; 2.router命名冲突; 3.很不美观
按照业务逻辑来为路由分类,可以与后台api控制器命名对应,这样方便寻找
推荐使用扁平化路由命名规范
.
├── router
│ ├── authority.js // 基础与权限模块文件
│ ├── publics.js // 公共模块文件
│ ├── user.js // 用户模块文件
│ ├── agent.js // 代理模块文件
│ └── router.js // 主路由文件
.
/**
* 路由总文件
* User: hjm100
* Date: 18-05-16 16:55
*/
import App from './App';
import authority from './authority';
import publics from './publics';
import user from './user';
import agent from './agent';
... ...
export default Object.assign(
authority, // 基础与权限模块
publics, // 公共模块
user, // 用户模块
agent // 代理模块
);
/**
* 公共模块文件
* User: hjm100
* Date: 18-05-16 16:55
*/
import Wechat from "../page/payment/Wechat.vue";
import payment from "../page/payment/payment.vue";
import paymentResult from "../page/payment/result.vue"; //支付完成后的回调页面
import paymentCheck from "../page/payment/check.vue"; //支付结果(联动优势微信公众号支付)
const PUBLICS_ROUTER = [
{ path: '/payment',component: payment,meta: { title: "支付" }, name: "paymentResult" },
{ path: '/payment/result', component: paymentResult, meta: { title: "支付返回" }, name: "payment" },
{ path: '/payment/check',component: paymentCheck, meta: { title: "支付结果" }, name: "paymentCheck" },
{ path: '/wechat',component: Wechat, meta: { title: "等待请求结果" }, name: "Wechat" },
]
export default PUBLICS_ROUTER;
/**
* main.js文件
* User: hjm100
* Date: 18-05-16 16:55
*/
import Vue from "vue";
import VueRouter from "vue-router";
import routes from "./router/router";
//定义路由函数
Vue.use(VueRouter);
const router = new VueRouter({
mode: "history",
routes
});
//创建每一页的title
router.beforeEach((to, from, next) => {
window.document.title = to.meta.title;
next();
});
export default new Vue({
router
}).$mount("#app");
拆分后,每个模块管理它自己领域的router、router.js就大大瘦身了
重点是降低了命名冲突的问题和将来混乱的问题。
关于路由以及api的设计问题建议提前构思与规划,当项目基本成型,在想起优化将会花费你的很多时间。
想好在做能节约你的很多时间
关于文件命名问题最好根据业务来命名,以维护(提高工作效率)
/**
* 路由总文件
* User: hjm100
* Date: 18-05-16 16:55
*/
import App from './App';
import authority from './authority';
import publics from './publics';
import user from './user';
import agent from './agent';
... ...
export default function(router){
authority(router); // 基础与权限模块
publics(router); // 公共模块
user(router); // 用户模块
agent(router); // 代理模块
... ...
return router.start(App, '#app');
// 拆分路由的时候我们要保证只有一个router.start
// 因为虽然你在子router配置文件中也写上页面是能正常工作的,但是Vue.js会在控制台报一个错误:
// [vue-router] already started
// 这个错误的意思就是router已经启动,无需启动多次。
// 所以,子router文件中不能存在 return router.start(App, '#app'); 这样的代码。
}
/**
* 代理模块文件
* User: hjm100
* Date: 18-05-16 16:55
*/
import Agent from "../page/agent/Agent.vue";
import AgentMain from "../page/agent/AgentMain.vue";
import AgentList from "../page/agent/agentlist/AgentList.vue";
import AgentDetail from "../page/agent/agentlist/AgentDetail.vue";
export default function (router) {
router.map({
'/agent': { component: Agent },
'/agent/main': { component: AgentMain, meta: { title: "代理数据" }, name: "AgentMain" },//代理数据
'/agent/list': { component: AgentList, meta: { title: "代理列表" }, name: "AgentList" },//代理列表
'/agent/detail': { component: AgentDetail, meta: { title: "代理详情" }, name: "AgentDetail" },//代理详情
});
}
首先考虑API配置文件怎么拆分,对于接口,我们肯定有多套环境,多套环境那么API的URL也不一样,
拆分成多个文件后多个文件需要共用同一个获取apiBase的方法,
所以这个apiBase就要写在公共的地方,在这里原来的api.config.js就变成了公共配置,apiBase就放在此文件内。
/**
* api.config.js api配置文件
* User: hjm100
* Date: 18-05-16 16:55
*/
export function apiBase() {
let hostname = window.location.hostname,
API_BASE_URL = 'http://192.168.1.237';//本地测试
if(hostname === 'hjm100.cn') { //正式环境
API_BASE_URL = 'http://hjmapi.cn';
} else if(hostname === 'hjmtest.cn') {//公网测试环境
API_BASE_URL = 'http://hjmtestapi.cn';
} else if(hostname === 'hjmdev.cn') {//内网测试环境
API_BASE_URL = 'http://hjmdevapi.cn';
}
return API_BASE_URL;
}
//然后在每个子API配置文件中引入即可:
import {apiBase} from '../api.config';
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。