欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何用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的頁(yè)面配置文件結(jié)構(gòu),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

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

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

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

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

page.ts文件展示:

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

此時(shí)我們要通過(guò)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中添加語(yǔ)音播報(bào)功能的實(shí)現(xiàn)

    vue中添加語(yǔ)音播報(bào)功能的實(shí)現(xiàn)

    本文主要介紹了vue中添加語(yǔ)音播報(bào)功能的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • vue為自定義路徑設(shè)置別名的方法

    vue為自定義路徑設(shè)置別名的方法

    這篇文章介紹了vue為自定義路徑設(shè)置別名的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-11-11
  • vue 獲取視頻時(shí)長(zhǎng)的實(shí)例代碼

    vue 獲取視頻時(shí)長(zhǎng)的實(shí)例代碼

    這篇文章主要介紹了vue 獲取視頻時(shí)長(zhǎng)的實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 詳解Vue 單文件組件的三種寫(xiě)法

    詳解Vue 單文件組件的三種寫(xiě)法

    這篇文章主要介紹了詳解Vue 單文件組件的三種寫(xiě)法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • vue使用原生swiper代碼實(shí)例

    vue使用原生swiper代碼實(shí)例

    這篇文章主要介紹了vue使用原生swiper代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Vue使用Multiavatarjs生成自定義隨機(jī)頭像的案例

    Vue使用Multiavatarjs生成自定義隨機(jī)頭像的案例

    這篇文章給大家介紹了Vue項(xiàng)目中使用Multiavatarjs生成自定義隨機(jī)頭像的案例,文中通過(guò)代碼示例介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-10-10
  • vue.js路由mode配置之去掉url上默認(rèn)的#方法

    vue.js路由mode配置之去掉url上默認(rèn)的#方法

    今天小編就為大家分享一篇vue.js路由mode配置之去掉url上默認(rèn)的#方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • vue窗口變化onresize詳解

    vue窗口變化onresize詳解

    這篇文章主要介紹了vue窗口變化onresize,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Vue動(dòng)態(tài)組件實(shí)現(xiàn)異常處理方法

    Vue動(dòng)態(tài)組件實(shí)現(xiàn)異常處理方法

    Vue3動(dòng)態(tài)組件怎么進(jìn)行異常處理?下面本篇文章帶大家聊聊Vue3 動(dòng)態(tài)組件異常處理的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-02-02
  • Vue3項(xiàng)目中env文件的配置和使用指南

    Vue3項(xiàng)目中env文件的配置和使用指南

    在現(xiàn)代前端開(kāi)發(fā)中,項(xiàng)目通常需要在不同的環(huán)境中運(yùn)行,例如開(kāi)發(fā)環(huán)境、測(cè)試環(huán)境和生產(chǎn)環(huán)境,每個(gè)環(huán)境可能需要不同的配置,通過(guò)使用?.env?文件,可以方便地管理這些環(huán)境變量,避免硬編碼配置,本文給大家介紹了Vue3項(xiàng)目中env文件的配置指南,需要的朋友可以參考下
    2025-03-03

最新評(píng)論