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

如何用vite動(dòng)態(tài)導(dǎo)入vue的路由配置詳解

 更新時(shí)間:2025年04月29日 08:27:16   作者:星極天下第一  
這篇文章主要介紹了如何用vite動(dòng)態(tài)導(dǎo)入vue的路由配置的相關(guān)資料,動(dòng)態(tài)導(dǎo)入路由模仿了uniapp的頁面配置文件結(jié)構(gòu),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

在Vue應(yīng)用中,通過路由可以實(shí)現(xiàn)不同頁面之間的切換,同時(shí)也可以實(shí)現(xiàn)頁面之間的傳參和控制頁面的顯示與隱藏。但是我們?cè)陂_發(fā)的過程中,會(huì)發(fā)現(xiàn)在路由配置中的路由配置和我們的項(xiàng)目結(jié)構(gòu)高度重復(fù),在我們修改頁面文件結(jié)構(gòu)時(shí)非常的麻煩與復(fù)雜,這時(shí)候,如果可以動(dòng)態(tài)的導(dǎo)入路由,就可以大大提示我們項(xiàng)目的可維護(hù)性。

我們?cè)陂_發(fā)中會(huì)經(jīng)常聽見一句話,約定大于配置,路由的動(dòng)態(tài)導(dǎo)入也是這句話應(yīng)用的一種,我們這里動(dòng)態(tài)導(dǎo)入路由模仿了在uniapp進(jìn)行小程序開發(fā)的頁面配置文件,要求有以下幾點(diǎn):

  • 所有的頁面都必須配置到/src/pages文件夾下;
  • 所有的頁面文件層級(jí)必須是/src/pages/頁面文件夾名稱/;
  • 所有的頁面文件中必須有page.ts作為配置文件和index.vue作為頁面入口文件;

結(jié)構(gòu)展示如下:

page.ts文件展示:

//home的page.ts
export default {
  title: '首頁',
  menuOrder: 1,
  childrens: [
    `../pages/homechildren`
  ]
}
//homechildren的page.ts
export default {
  title: '首頁的子組件',
  menuOrder: 1,
  isChild: true,
}
//login的page.ts
export default {
  title: '登錄',
  menuOrder: 2
}

此時(shí)我們要通過vite的函數(shù)import.meta.glob()和import()掃描pages文件夾動(dòng)態(tài)生成路由,代碼如下:

//路由配置文件
import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'

const pages = import.meta.glob('../pages/**/page.ts', {
  eager: true,
  import: 'default'
})

const components = import.meta.glob('../pages/**/index.vue')

const getChildRoutes = async (childrens: string[]) => {
  const res = [];

  for (const item of childrens) {
    const pageModule = await import(`${item}/page.ts`);
    const componentModule = await import(`${item}/index.vue`);

    const routePath = item.replace('../pages/', '').replace('/page.ts', '') || '/';
    const name = routePath.split('/').filter(Boolean).join('-') || 'index';

    res.push({
      path: routePath,
      name,
      component: componentModule.default,
      meta: pageModule.default
    });
  }

  return res;
};

const routes = Object.entries(pages).filter(([path, meta]: [string, any]) => !meta.isChild).map(([path, meta]: [string, any]) => {
  const compPath = path.replace('page.ts', 'index.vue')
  path = path.replace('../pages', '').replace('/page.ts', '') || '/';
  const name = path.split('/').filter(Boolean).join('-') || 'index';

  return {
    path,
    name,
    component: components[compPath],
    meta: meta,
    children: !!meta.childrens ? getChildRoutes(meta.childrens) : []
  } as RouteRecordRaw
})

const router = createRouter({
  history: createWebHistory(),
  routes: routes,
})

//路由重定向
router.beforeEach((to, from, next) => {
  if (to.path === '/') {
    next('/home')
  } else if (!routes.some(route => route.path === to.path)) {
    next('/home')
  } else {
    next()
  }
  
})

export {
  router
}

效果展示:

路由對(duì)象展示:

總結(jié) 

到此這篇關(guān)于如何用vite動(dòng)態(tài)導(dǎo)入vue的路由配置的文章就介紹到這了,更多相關(guān)vite動(dòng)態(tài)導(dǎo)入vue路由配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 修改vue源碼實(shí)現(xiàn)動(dòng)態(tài)路由緩存的方法

    修改vue源碼實(shí)現(xiàn)動(dòng)態(tài)路由緩存的方法

    這篇文章主要介紹了修改vue源碼實(shí)現(xiàn)動(dòng)態(tài)路由緩存的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • vue實(shí)現(xiàn)定義一個(gè)全局實(shí)例Vue.prototype

    vue實(shí)現(xiàn)定義一個(gè)全局實(shí)例Vue.prototype

    這篇文章主要介紹了vue實(shí)現(xiàn)定義一個(gè)全局實(shí)例Vue.prototype,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • vue項(xiàng)目中使用qrcodesjs2生成二維碼簡(jiǎn)單示例

    vue項(xiàng)目中使用qrcodesjs2生成二維碼簡(jiǎn)單示例

    最近項(xiàng)目中需生成二維碼,發(fā)現(xiàn)了很好用的插件qrcodesjs2,所以下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目中使用qrcodesjs2生成二維碼的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • vue導(dǎo)入處理Excel表格功能步驟詳解

    vue導(dǎo)入處理Excel表格功能步驟詳解

    最近開發(fā)遇到一個(gè)點(diǎn)擊導(dǎo)入按鈕讓excel文件數(shù)據(jù)導(dǎo)入在表格的需求,所以下面這篇文章主要給大家介紹了關(guān)于vue導(dǎo)入處理Excel表格功能步驟的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • 詳解Vue中是如何實(shí)現(xiàn)cache緩存的

    詳解Vue中是如何實(shí)現(xiàn)cache緩存的

    這篇文章分享一個(gè)比較有意思的東西,那就是Vue中如何實(shí)現(xiàn)cache緩存的,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-07-07
  • Vue組件全局注冊(cè)實(shí)現(xiàn)警告框的實(shí)例詳解

    Vue組件全局注冊(cè)實(shí)現(xiàn)警告框的實(shí)例詳解

    這篇文章主要介紹了Vue組件全局注冊(cè)實(shí)現(xiàn)警告框的實(shí)例,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06
  • 在vue3的項(xiàng)目中使用svg圖標(biāo)并且封裝實(shí)踐

    在vue3的項(xiàng)目中使用svg圖標(biāo)并且封裝實(shí)踐

    這篇文章主要介紹了在vue3的項(xiàng)目中使用svg圖標(biāo)并且封裝實(shí)踐,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2026-03-03
  • 項(xiàng)目中如何使用axios過濾多次重復(fù)請(qǐng)求詳解

    項(xiàng)目中如何使用axios過濾多次重復(fù)請(qǐng)求詳解

    在項(xiàng)目開發(fā)中經(jīng)常需要處理重復(fù)點(diǎn)擊導(dǎo)致多次調(diào)用接口的問題,這篇文章主要介紹了項(xiàng)目中如何使用axios過濾多次重復(fù)請(qǐng)求的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • vue實(shí)現(xiàn)el-menu與el-tabs聯(lián)動(dòng)的項(xiàng)目實(shí)踐

    vue實(shí)現(xiàn)el-menu與el-tabs聯(lián)動(dòng)的項(xiàng)目實(shí)踐

    本文講述了如何使用Vue.js中的ElementUI組件庫實(shí)現(xiàn)el-menu與el-tabs的聯(lián)動(dòng),通過在el-menu中選擇菜單項(xiàng),可以切換el-tabs的內(nèi)容區(qū)域,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • VUE?組件的計(jì)算屬性詳解

    VUE?組件的計(jì)算屬性詳解

    這篇文章主要介紹了VUE組件的計(jì)算屬性詳解,使用計(jì)算機(jī)屬性還是methods取決于你是否需要緩存,當(dāng)遍歷大數(shù)組和做大量計(jì)算時(shí),應(yīng)當(dāng)使用計(jì)算機(jī)屬性,除非你不希望得到緩存,下文來了解具體詳情
    2022-06-06

最新評(píng)論

莒南县| 长岛县| 湘乡市| 秀山| 广丰县| 隆化县| 武安市| 新泰市| 合水县| 长阳| 延吉市| 襄樊市| 麻阳| 韶山市| 和林格尔县| 嵊州市| 旌德县| 安溪县| 齐河县| 民勤县| 阿拉善右旗| 清河县| 玉树县| 江门市| 新丰县| 广平县| 汤原县| 涞源县| 博爱县| 嵊泗县| 西青区| 嘉善县| 平和县| 濮阳县| 内江市| 延安市| 米易县| 富阳市| 高密市| 临颍县| 松滋市|