//router.js
import Router from 'vue-router'
import Vue from 'vue'
import login from './components/views/login'
import chat from './components/views/chat'
import App from './index'
Vue.use(Router)
export default new Router({
mode: 'abstract',
routes: [
{ path: '/login',component:login},
{ path:'/chat',component:chat},
{ path:'/',component:App}
]
})
舉個例子,上面只有3個頁面,就需要import 3次,下面routes要寫3個映射。
如果是上百個頁面的系統(tǒng),不是要寫死人?
你可以反過來思考這樣的兩個問題
Router是什么,他就像是一本字典,帶領(lǐng)你走向應(yīng)用的站點地圖。既然是字典,一一對應(yīng)不是更好嗎?既然能做一一對應(yīng),也就不需要手寫,僅僅只需要進行一次目錄讀取即可。你可以使用nodejs進行預(yù)讀,也可以通過webpack進行預(yù)讀,按照文件的擺放結(jié)構(gòu)來生成路由。這個能解決第一個問題,至于第二個問題,其實大部分路由的功能我們是用不到的,或者可以封裝在你自己的框架中,以減少開發(fā)者的編寫和維護成本。
你可以參考一下nuxt.js,他里面的路由就是被抽象化了的,你只需要按要求合理的放文件和文件夾即可。
再一次提到require.context,按照一定結(jié)構(gòu)去放對應(yīng)文件就可以,可以適當(dāng)改變路由定義,支持懶加載
const routes = [
{ path: '*', redirect: '/index' }
];
importPages(require.context('./views', true, /\.vue$/,'lazy'))
function importPages (r) {
r.keys().forEach(key => {
routes.push({ path: (key.split('.'))[1], component: ()=>r(key)})
});
}肯定是能實現(xiàn)的, 現(xiàn)實中nuxt不就是自動掃描文件,自動生成路由嗎.
@buzzzzz 說的可以試試.
http://www.css88.com/doc/webp...
例如這樣
{
"zh-CN": [
{
"name": "login",
"path": "/login",
"hidden": true
},
{
"name": "dashboard",
"path": "",
"meta": { "title": "dashboard", "icon": "dashboard" },
"children": [
{
"path": "dashboard/index",
"name": "dashboardindex",
"meta": { "title": "dashboard", "icon": "dashboard" }
}
]
},
{
"path": "/form",
"name": "form",
"meta": {
"title": "form",
"icon": "form"
},
"children": [
{
"path": "create",
"name": "create",
"meta": { "title": "createForm","icon": "" }
},
{
"path": "edit",
"name": "edit",
"meta": { "title": "editForm", "icon": ""}
}
]
}
]
}
import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)
import Layout from '../views/layout/Layout'
import navConfig from './nav.config.json'
const LOAD_DOCS_MAP = {
'zh-CN': (lang, path) => {
return r => require.ensure([], () =>
r(require(`../views${lang}/${path}.vue`)),
'zh-CN');
}
};
const loadDocs = function(lang, path) {
return LOAD_DOCS_MAP["zh-CN"](lang, path);
};
const registerRoute = (navConfig) => {
let route = [];
navConfig.forEach((lang, index) => {
let navs = lang.children;
if(lang.children){
route.push({
path: lang.path,
redirect: `${lang.path}/${lang.children[0].path}`,
component: Layout,
meta:lang.meta,
children: []
});
navs.forEach(nav => {
addRoute(nav, lang, index);
});
}else{
if(lang.hidden){
route.push({
path: lang.path,
component: loadDocs(lang.path,"index"),
hidden: true,
meta: {
title: "",
icon: ""
},
});
}else{
}
}
});
function addRoute(page, lang, index) {
const component = loadDocs(lang.path,page.path);
let child = {
path: page.path,
meta: page.meta,
name: page.name,
component: component.default || component
};
route[index].children.push(child);
}
return route;
};
let route = registerRoute(navConfig["zh-CN"]);
export default new Router({
// mode: 'history', // require service support
scrollBehavior: () => ({ y: 0 }),
routes: route,
})北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。