亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

vue 自動化路由實現(xiàn)代碼

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

1.需求描述

在寫vue的項目中,一般情況下我們每添加一個新頁面都得添加一個新路由。為此我們在項目中會專門的一個文件夾來管理路由,如下圖所示

那么有沒有一種方案,能夠實現(xiàn)我們在文件夾中新建了一個vue文件,就自動幫我們添加路由。特別在我們的一個ERP后臺項目中,我們幾乎都是一個文件夾下有很多子文件,子文件中一般包含index.vue, detail.vue, edit.vue,分別對應的事列表頁,詳情頁和編輯頁。

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

2. require.context介紹

官方文檔require.context

簡單說就是:有了require.context,我們可以得到指定文件夾下的所有文件

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

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

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

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

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

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

3.直接上代碼

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

簡簡單單的幾十行代碼就實現(xiàn)了所有的路由功能,再也不用一行一行的寫路由文件了??赡苣愕奈募芾矸绞胶臀业牟灰粯?,但是只要稍微改改正則就行了。

4. 注意

  1. 不能用import引入路由,因為用import引入不支持變量
  2. 不能用別名,找了半天問題,才知道用變量時也不能用別名,所以我用的都是相對路徑

5.好處

  • 不用在添加路由了,這個就不說了,明眼人都看得出來
  • 知道了路由,一個能找到對應的文件,以前我們團隊就出現(xiàn)過,亂寫path的情況
  • 更好的控制驗證和keepAlive

總結

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

相關文章

  • vue3中使用pinia(大菠蘿)狀態(tài)管理倉庫的項目實踐

    vue3中使用pinia(大菠蘿)狀態(tài)管理倉庫的項目實踐

    本文主要介紹了vue3中使用pinia(大菠蘿)狀態(tài)管理倉庫,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • vue實現(xiàn)彈窗引用另一個頁面窗口

    vue實現(xiàn)彈窗引用另一個頁面窗口

    這篇文章主要介紹了vue實現(xiàn)彈窗引用另一個頁面窗口,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 如何解決element-ui中select下拉框popper超出彈框問題

    如何解決element-ui中select下拉框popper超出彈框問題

    這篇文章主要介紹了如何解決element-ui中select下拉框popper超出彈框問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • 深入理解Vue的插件機制與install詳細

    深入理解Vue的插件機制與install詳細

    這篇文章主要介紹的是深入理解Vue的插件機制與install,文章主要是講解install函數(shù)可以做些什么、install內部是怎么實現(xiàn)的、 Vuex,Vue-Router插件在install期間到底干了什么,需要的小伙伴可以參考一下
    2021-09-09
  • vuex實現(xiàn)購物車的增加減少移除

    vuex實現(xiàn)購物車的增加減少移除

    這篇文章主要為大家詳細介紹了vuex實現(xiàn)購物車的增加減少移除,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • Vue中的$set的使用實例代碼

    Vue中的$set的使用實例代碼

    這篇文章主要介紹了Vue中的$set的使用,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-10-10
  • vue中路由傳參以及跨組件傳參詳解

    vue中路由傳參以及跨組件傳參詳解

    這篇文章主要給大家介紹了關于vue中路由傳參以及跨組件傳參的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • vuejs使用axios異步訪問時用get和post的實例講解

    vuejs使用axios異步訪問時用get和post的實例講解

    今天小編就為大家分享一篇vuejs使用axios異步訪問時用get和post的實例講解,具有很好的參考價值。希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Vue3關于響應式數(shù)據(jù)類型詳解(ref、reactive、toRef、及toRefs)

    Vue3關于響應式數(shù)據(jù)類型詳解(ref、reactive、toRef、及toRefs)

    這篇文章主要介紹了Vue3關于響應式數(shù)據(jù)類型(ref、reactive、toRef、以及toRefs),本文結合示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01
  • VUE實現(xiàn)一個分頁組件的示例

    VUE實現(xiàn)一個分頁組件的示例

    本篇文章主要介紹了VUE實現(xiàn)一個分頁組件的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09

最新評論