最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue 自動(dòng)化路由實(shí)現(xiàn)代碼

 更新時(shí)間:2019年09月03日 12:51:28   作者:面包大蝦  
這篇文章主要介紹了vue 自動(dòng)化路由實(shí)現(xiàn)代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

1.需求描述

在寫(xiě)vue的項(xiàng)目中,一般情況下我們每添加一個(gè)新頁(yè)面都得添加一個(gè)新路由。為此我們?cè)陧?xiàng)目中會(huì)專門的一個(gè)文件夾來(lái)管理路由,如下圖所示

那么有沒(méi)有一種方案,能夠?qū)崿F(xiàn)我們?cè)谖募A中新建了一個(gè)vue文件,就自動(dòng)幫我們添加路由。特別在我們的一個(gè)ERP后臺(tái)項(xiàng)目中,我們幾乎都是一個(gè)文件夾下有很多子文件,子文件中一般包含index.vue, detail.vue, edit.vue,分別對(duì)應(yīng)的事列表頁(yè),詳情頁(yè)和編輯頁(yè)。

上圖是我們的文件目錄,views文件夾中存放的是所有的頁(yè)面,goodsPlanning是一級(jí)目錄,onNewComplete和thirdGoods是二級(jí)目錄,二級(jí)目錄中存放的是具體的頁(yè)面,indexComponents中存放的是index.vue的文件,editComponents也是同樣的道理。index.vue對(duì)應(yīng)的路由是/goodsPlanning/onNewComplete, edit.vue對(duì)應(yīng)的路由是/goodsPlanning/onNewComplete/edit,detail.vue也是同樣的道理。所以我們的文件夾和路由是完全能夠?qū)?yīng)上的,只要知道路由,就能很快的找到對(duì)應(yīng)的文件。那么有沒(méi)有辦法能夠讀取我們二級(jí)目錄下的所有文件,然后根據(jù)文件名來(lái)生成路由呢?答案是有的

2. require.context介紹

官方文檔require.context

簡(jiǎn)單說(shuō)就是:有了require.context,我們可以得到指定文件夾下的所有文件

require.context(directory, useSubdirectories = false, regExp = /^\.\//);

require.context有三個(gè)參數(shù):

  • directory:說(shuō)明需要檢索的目錄
  • useSubdirectories:是否檢索子目錄
  • regExp: 匹配文件的正則表達(dá)式

require.context()的返回值,有一個(gè)keys方法,返回的是個(gè)數(shù)組

let routers = require.context('VIEWS', true).keys()
console.log(routers)

通過(guò)上面的代碼,我們打印出了所有的views文件夾下的所有文件和文件夾,我們只要寫(xiě)好正則就能找到我們所需要的文件

3.直接上代碼

import Layout from 'VIEWS/layout/index'
/**
 * 正則 首先匹配./ ,然后一級(jí)目錄,不包含components的二級(jí)目錄,以.vue結(jié)尾的三級(jí)目錄
 */
let routers = require.context('VIEWS', true, /\.\/[a-z]+\/(?!components)[a-z]+\/[a-z]+\.vue$/i).keys()
let indexRouterMap = {} // 用來(lái)存儲(chǔ)以index.vue結(jié)尾的文件,因?yàn)閕ndex.vue是列表文件,需要加入layout(我們的菜單),需要keepAlive,需要做權(quán)限判斷
let detailRouterArr = [] // 用來(lái)存儲(chǔ)以非index.vue結(jié)尾的vue文件,此類目前不需要layout
routers.forEach(item => {
 const paths = item.match(/[a-zA-Z]+/g) //paths中存儲(chǔ)了一個(gè)目錄,二級(jí)目錄,文件名
 const routerChild = { //定義路由對(duì)象
  path: paths[1],   
  name: `${paths[0]}${_.upperFirst(paths[1])}`,  //upperFirst,lodash 首字母大寫(xiě)方法
  component(resolve) {
   require([`../../views${item.slice(1)}`], resolve)
  },
 }
 if (/index\.vue$/.test(item)) { //判斷是否以index。vue結(jié)尾
  if (indexRouterMap[paths[0]]) {  //判斷一級(jí)路由是否存在,存在push二級(jí)路由,不存在則新建
   indexRouterMap[paths[0]].children.push(routerChild)
  } else {
   indexRouterMap[paths[0]] = {
    path: '/' + paths[0],
    component: Layout,
    children: [routerChild]
   }
  }
 } else {   //不以index.vue結(jié)尾的,直接添加到路由中
  detailRouterArr.push({
   path: item.slice(1, -4),  //渠道最前面的 . 和最后的.vue
   name: `${paths[0]}${_.upperFirst(paths[1])}${_.upperFirst(paths[2])}`,
   component(resolve) {
    require([`../../views${item.slice(1)}`], resolve)
   },
   meta: {
    noCache: true,  //不keepAlive
    noVerify: true  //不做權(quán)限驗(yàn)證
   }
  })
 }
})
export default [
 ...Object.values(indexRouterMap),
 ...detailRouterArr,
 /**
  * dashboard單獨(dú)處理下
  */
 {
  path: '',
  component: Layout,
  redirect: 'dashboard',
  children: [
   {
    path: 'dashboard',
    component: () => import('VIEWS/dashboard/index'),
    name: 'dashboard',
    meta: { title: '首頁(yè)', noCache: true, noVerify: true }
   }
  ]
 },
]

簡(jiǎn)簡(jiǎn)單單的幾十行代碼就實(shí)現(xiàn)了所有的路由功能,再也不用一行一行的寫(xiě)路由文件了。可能你的文件管理方式和我的不一樣,但是只要稍微改改正則就行了。

4. 注意

  1. 不能用import引入路由,因?yàn)橛胕mport引入不支持變量
  2. 不能用別名,找了半天問(wèn)題,才知道用變量時(shí)也不能用別名,所以我用的都是相對(duì)路徑

5.好處

  • 不用在添加路由了,這個(gè)就不說(shuō)了,明眼人都看得出來(lái)
  • 知道了路由,一個(gè)能找到對(duì)應(yīng)的文件,以前我們團(tuán)隊(duì)就出現(xiàn)過(guò),亂寫(xiě)path的情況
  • 更好的控制驗(yàn)證和keepAlive

總結(jié)

以上所述是小編給大家介紹的vue 自動(dòng)化路由實(shí)現(xiàn)代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • 基于vue實(shí)現(xiàn)新聞自下往上滾動(dòng)效果(示例代碼)

    基于vue實(shí)現(xiàn)新聞自下往上滾動(dòng)效果(示例代碼)

    這篇文章主要介紹了vue新聞自下往上滾動(dòng)效果,當(dāng)鼠標(biāo)鼠標(biāo)放上暫停滾動(dòng),鼠標(biāo)移出繼續(xù)滾動(dòng),本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • Vue響應(yīng)式原理及雙向數(shù)據(jù)綁定示例分析

    Vue響應(yīng)式原理及雙向數(shù)據(jù)綁定示例分析

    這篇文章主要為大家介紹了Vue響應(yīng)式原理及雙向數(shù)據(jù)綁定的示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 簡(jiǎn)單了解Vue + ElementUI后臺(tái)管理模板

    簡(jiǎn)單了解Vue + ElementUI后臺(tái)管理模板

    這篇文章主要介紹了簡(jiǎn)單了解Vue + ElementUI后臺(tái)管理模板,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 解決vue項(xiàng)目跳轉(zhuǎn)同樣的頁(yè)面不刷新的問(wèn)題思路詳解

    解決vue項(xiàng)目跳轉(zhuǎn)同樣的頁(yè)面不刷新的問(wèn)題思路詳解

    做公司官網(wǎng)項(xiàng)目的時(shí)候遇到的場(chǎng)景,頂部導(dǎo)航欄分類商品跳轉(zhuǎn)到分類詳情,然后在分類詳情再次點(diǎn)擊頂部導(dǎo)航欄里另外的分類商品,跳到同樣的頁(yè)面數(shù)據(jù)不刷新,下面小編給大家分享解決方式,關(guān)于vue跳轉(zhuǎn)不刷新問(wèn)題感興趣的朋友一起看看吧
    2023-09-09
  • vue如何重置data的所有屬性

    vue如何重置data的所有屬性

    這篇文章主要介紹了vue如何重置data的所有屬性,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue中commit和dispatch區(qū)別及用法辨析(最新)

    Vue中commit和dispatch區(qū)別及用法辨析(最新)

    在Vue中,commit和dispatch是兩個(gè)用于觸發(fā)Vuex store中的mutations和actions的方法,這篇文章主要介紹了Vue中commit和dispatch區(qū)別及其用法辨析,需要的朋友可以參考下
    2024-06-06
  • vue項(xiàng)目中監(jiān)聽(tīng)手機(jī)物理返回鍵的實(shí)現(xiàn)

    vue項(xiàng)目中監(jiān)聽(tīng)手機(jī)物理返回鍵的實(shí)現(xiàn)

    這篇文章主要介紹了vue項(xiàng)目中監(jiān)聽(tīng)手機(jī)物理返回鍵的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Vue3中導(dǎo)入和使用組件幾種常見(jiàn)方法(.vue文件)

    Vue3中導(dǎo)入和使用組件幾種常見(jiàn)方法(.vue文件)

    組件是Vue.js最強(qiáng)大的功能之一, 組件可以擴(kuò)展HTML元素,封裝可重用的代碼,下面這篇文章主要介紹了Vue3中導(dǎo)入和使用組件幾種常見(jiàn)方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-09-09
  • element表單使用校驗(yàn)之校驗(yàn)失效問(wèn)題詳解

    element表單使用校驗(yàn)之校驗(yàn)失效問(wèn)題詳解

    最近工作中遇到了element表單校驗(yàn)失敗的情況,通過(guò)查找相關(guān)資料終于解決了,所以下面這篇文章主要給大家介紹了關(guān)于element表單使用校驗(yàn)之校驗(yàn)失效問(wèn)題的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • 基于Vue3編寫(xiě)一個(gè)簡(jiǎn)單的播放器

    基于Vue3編寫(xiě)一個(gè)簡(jiǎn)單的播放器

    這篇文章主要為大家詳細(xì)介紹了如何基于Vue3編寫(xiě)一個(gè)簡(jiǎn)單的播放器,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Vue3有一定的幫助,需要的可以參考一下
    2023-03-03

最新評(píng)論

左贡县| 重庆市| 孙吴县| 新化县| 田林县| 繁昌县| 兰坪| 庆城县| 门源| 沙坪坝区| 商南县| 北海市| 彰武县| 彰武县| 诸暨市| 潞西市| 嘉祥县| 茌平县| 双城市| 淮阳县| 汉阴县| 宽甸| 勃利县| 易门县| 尖扎县| 达孜县| 金寨县| 宁海县| 介休市| 耿马| 衡山县| 资阳市| 元谋县| 许昌县| 开江县| 苏尼特左旗| 台江县| 郯城县| 盘山县| 汤阴县| 桂东县|