vue3.0路由自動導入的方法實例
一、前提
我們使用的是require.context方法導入,在vite創(chuàng)建的項目內使用會報錯"require not found",所以必須用webpack創(chuàng)建項目?;蛘哂写竽芸梢哉f說vite怎么解決這個問題。
二、規(guī)則
我們使用的規(guī)則是,搜索src/views/路徑下的所有目錄和子目錄,搜索文件名叫做"index.vue"的文件,使用上級目錄的名字作為組件名,進行注冊。結構如下:

和公共組件注冊一樣,我們只注冊index.vue組件,其他名稱的組件不進行注冊。
三、導入
// src/router/index.ts
import {createRouter, createWebHashHistory, createWebHistory, RouteRecordRaw} from 'vue-router'
import store from "@/store";
import daxie from "@/util/upper"; // 引入一個方法,將字符串的首字母進行大寫,我習慣將pathname首字母大寫
// 路由自動化注冊
const routerList:any = []
const requireComponent = require.context('@/views', true, /index.vue$/) // 找到views路徑下的所有文件
const dynamic_route = requireComponent.keys().filter(fileName => {
return true
})
// 現(xiàn)在文件數(shù)組是亂序的,我們首先進行排序,父級路由在前面,如果是子級路由在前面,結果父級理由還沒有創(chuàng)建,就會報錯
// console.log(dynamic_route,"排序前")
dynamic_route.sort(function (a,b):number{
const jieguoa:any = a.split("").filter((item:string)=>{
return "/" == item
})
const jieguob:any = b.split("").filter((item:string)=>{
return "/" == item
})
if(jieguoa.length<jieguob.length){return -1}
if(jieguoa.length>jieguob.length){return 1}
return 0
})
// console.log(dynamic_route,"排序后")
dynamic_route.forEach(fileName => {
const path = fileName.replace(".", "")
const namelist = fileName.replace(".", "").replace("index.vue", "").split("/").filter((i:any) => {
return i
})
// 測試配置
const componentConfig = requireComponent(fileName)
// 組件可以隨意添加任何屬性,目前添加一個canshu屬性,是一個數(shù)組,里面存放著需要的動態(tài)參數(shù)
// console.log(componentConfig.default,"組件配置2")
// 每一層都需要手動指定,只做三層吧
if(namelist.length == 1){
routerList.push({
path:"/"+ namelist[namelist.length - 1],
name: daxie(namelist[namelist.length-1]),
component:()=>import(`../views${path}`),
children:[],
})
}else if(namelist.length == 2){
routerList.forEach((item:any)=>{
if(item.name == daxie(namelist[0])){
// 判斷組件是否需要參數(shù)
const canshu = componentConfig.default.canshu || []
if(canshu){
for (let i=0;i<canshu.length;i++){
canshu[i] = "/:"+canshu[i]
}
item.children.push({
path: namelist[namelist.length-1] + canshu.join(""),
name: daxie(namelist[namelist.length-1]),
component:()=>import(`../views${path}`),
children:[],
})
}else{
item.children.push({
path: namelist[namelist.length-1],
name: daxie(namelist[namelist.length-1]),
component:()=>import(`../views${path}`),
children:[],
})
}
}
})
}else if(namelist.length == 3){
routerList.forEach((item:any)=>{
if(item.name == daxie(namelist[0])){
item.children.forEach((yuansu:any)=>{
if(yuansu.name == daxie(namelist[1])){
// 判斷是不是需要參數(shù)
const canshu = componentConfig.default.canshu || []
if(canshu){
for (let i=0;i<canshu.length;i++){
canshu[i] = "/:"+canshu[i]
}
yuansu.children.push({
path: namelist[namelist.length - 1]+canshu.join(""),
name: daxie(namelist[namelist.length-1]),
component:()=>import(`../views${path}`),
})
}else {
yuansu.children.push({
path: namelist[namelist.length - 1],
name: daxie(namelist[namelist.length-1]),
component:()=>import(`../views${path}`),
})
}
}
})
}
})
}
})
const routes: Array<RouteRecordRaw> = [
{
path: '/',
name: 'Home',
component: ()=>import("@/views/shouye/shouye.vue")
},
{
path: '/about',
name: 'About',
component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
},
...routerList,
{
path: '/404',
name: '404',
component: () => import('@/views/404.vue')
},
{
path: '/:pathMatch(.*)',
redirect: '/404'
},
]
// 注意順序,根據最新的路由匹配規(guī)則,404頁面必須在最后,
console.log(routes,"查看路由表內容")
const router = createRouter({
history: createWebHistory(),
// history: createWebHashHistory(),
routes
})
export default router
這樣,只需要根據規(guī)則創(chuàng)建組件,就會被自動注冊到路由里面。免去手動注冊的繁瑣操作。
總結
到此這篇關于vue3.0路由自動導入的文章就介紹到這了,更多相關vue3.0路由自動導入內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Vue移動端下拉加載更多數(shù)據onload實現(xiàn)方法淺析
這篇文章主要介紹了Vue移動端下拉加載更多數(shù)據onload實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02
Vue filter 過濾當前時間 實現(xiàn)實時更新效果
這篇文章主要介紹了Vue filter 過濾當前時間 實現(xiàn)實時更新效果,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-12-12
vue3-vue-router創(chuàng)建靜態(tài)路由和動態(tài)路由方式
這篇文章主要介紹了vue3-vue-router創(chuàng)建靜態(tài)路由和動態(tài)路由方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10
基于electron+vue3+ts搭建桌面端應用并且可以熱更新
這篇文章主要為大家詳細介紹了如何基于electron+vue3+ts搭建桌面端應用并且可以熱更新,文中的示例代碼講解詳細,感興趣的小伙伴可以參考下2023-10-10

