激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務(wù)器之家 - 編程語言 - JavaScript - vue.js - vue3.0路由自動(dòng)導(dǎo)入的方法實(shí)例

vue3.0路由自動(dòng)導(dǎo)入的方法實(shí)例

2022-02-25 16:37放風(fēng)嘍 vue.js

這篇文章主要給大家介紹了關(guān)于vue3.0路由自動(dòng)導(dǎo)入的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、前提

我們使用的是require.context方法導(dǎo)入,在vite創(chuàng)建的項(xiàng)目內(nèi)使用會(huì)報(bào)錯(cuò)"require not found",所以必須用webpack創(chuàng)建項(xiàng)目。或者有大能可以說說vite怎么解決這個(gè)問題。

二、規(guī)則

我們使用的規(guī)則是,搜索src/views/路徑下的所有目錄和子目錄,搜索文件名叫做"index.vue"的文件,使用上級(jí)目錄的名字作為組件名,進(jìn)行注冊(cè)。結(jié)構(gòu)如下:

vue3.0路由自動(dòng)導(dǎo)入的方法實(shí)例

和公共組件注冊(cè)一樣,我們只注冊(cè)index.vue組件,其他名稱的組件不進(jìn)行注冊(cè)。

三、導(dǎo)入

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// src/router/index.ts
 
import {createRouter, createWebHashHistory, createWebHistory, RouteRecordRaw} from 'vue-router'
import store from "@/store";
import daxie from "@/util/upper";       // 引入一個(gè)方法,將字符串的首字母進(jìn)行大寫,我習(xí)慣將pathname首字母大寫
 
// 路由自動(dòng)化注冊(cè)
const routerList:any = []
const requireComponent = require.context('@/views', true, /index.vue$/) // 找到views路徑下的所有文件
const dynamic_route = requireComponent.keys().filter(fileName => {
    return true
})
// 現(xiàn)在文件數(shù)組是亂序的,我們首先進(jìn)行排序,父級(jí)路由在前面,如果是子級(jí)路由在前面,結(jié)果父級(jí)理由還沒有創(chuàng)建,就會(huì)報(bào)錯(cuò)
// 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)
    // 組件可以隨意添加任何屬性,目前添加一個(gè)canshu屬性,是一個(gè)數(shù)組,里面存放著需要的動(dòng)態(tài)參數(shù)
    // console.log(componentConfig.default,"組件配置2")
    // 每一層都需要手動(dòng)指定,只做三層吧
    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'
    },
]
// 注意順序,根據(jù)最新的路由匹配規(guī)則,404頁面必須在最后,
console.log(routes,"查看路由表內(nèi)容")
 
const router = createRouter({
    history: createWebHistory(),
    // history: createWebHashHistory(),
    routes
})
 
export default router

這樣,只需要根據(jù)規(guī)則創(chuàng)建組件,就會(huì)被自動(dòng)注冊(cè)到路由里面。免去手動(dòng)注冊(cè)的繁瑣操作。

總結(jié)

到此這篇關(guān)于vue3.0路由自動(dòng)導(dǎo)入的文章就介紹到這了,更多相關(guān)vue3.0路由自動(dòng)導(dǎo)入內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/qq_43656607/article/details/115488076

延伸 · 閱讀

精彩推薦
  • vue.js詳解vue 表單綁定與組件

    詳解vue 表單綁定與組件

    這篇文章主要介紹了vue 表單綁定與組件的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下...

    Latteitcjz6432022-02-12
  • vue.js梳理一下vue中的生命周期

    梳理一下vue中的生命周期

    看過很多人講vue的生命周期,但總是被繞的云里霧里,尤其是自學(xué)的同學(xué),可能js的基礎(chǔ)也不是太牢固,聽起來更是吃力,那我就已個(gè)人之淺見,以大白話...

    CRMEB技術(shù)團(tuán)隊(duì)7992021-12-22
  • vue.js用vite搭建vue3應(yīng)用的實(shí)現(xiàn)方法

    用vite搭建vue3應(yīng)用的實(shí)現(xiàn)方法

    這篇文章主要介紹了用vite搭建vue3應(yīng)用的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下...

    Asiter7912022-01-22
  • vue.jsVue2.x 項(xiàng)目性能優(yōu)化之代碼優(yōu)化的實(shí)現(xiàn)

    Vue2.x 項(xiàng)目性能優(yōu)化之代碼優(yōu)化的實(shí)現(xiàn)

    這篇文章主要介紹了Vue2.x 項(xiàng)目性能優(yōu)化之代碼優(yōu)化的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋...

    優(yōu)小U9632022-02-21
  • vue.jsVue2.x-使用防抖以及節(jié)流的示例

    Vue2.x-使用防抖以及節(jié)流的示例

    這篇文章主要介紹了Vue2.x-使用防抖以及節(jié)流的示例,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下...

    Kyara6372022-01-25
  • vue.jsVue中引入svg圖標(biāo)的兩種方式

    Vue中引入svg圖標(biāo)的兩種方式

    這篇文章主要給大家介紹了關(guān)于Vue中引入svg圖標(biāo)的兩種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的...

    十里不故夢(mèng)10222021-12-31
  • vue.jsVue多選列表組件深入詳解

    Vue多選列表組件深入詳解

    這篇文章主要介紹了Vue多選列表組件深入詳解,這個(gè)是vue的基本組件,有需要的同學(xué)可以研究下...

    yukiwu6752022-01-25
  • vue.jsVue項(xiàng)目中實(shí)現(xiàn)帶參跳轉(zhuǎn)功能

    Vue項(xiàng)目中實(shí)現(xiàn)帶參跳轉(zhuǎn)功能

    最近做了一個(gè)手機(jī)端系統(tǒng),其中遇到了父頁面需要攜帶參數(shù)跳轉(zhuǎn)至子頁面的問題,現(xiàn)已解決,下面分享一下實(shí)現(xiàn)過程,感興趣的朋友一起看看吧...

    YiluRen丶4302022-03-03
主站蜘蛛池模板: 欧美一级精品片在线看 | 亚洲啪啪 | 免费放黄网站在线播放 | 精品国产九九九 | 又黄又爽免费无遮挡在线观看 | 黄色成人在线播放 | 免费看欧美黑人毛片 | 真人一级毛片免费 | 久久久久久精 | 久久精品亚洲欧美日韩精品中文字幕 | 国产精品久久久久久久久久了 | 免费a观看 | 久久免费视频7 | 91精品国产91 | 色淫视频| 午夜视频观看 | 欧美成人免费电影 | 精品国产一区二区三区久久久蜜月 | 一本色道久久综合亚洲精品图片 | 欧美亚洲国产一区 | 黄色的视频在线观看 | 欧美性生交xxxxx免费观看 | 国产欧美日韩在线不卡第一页 | 欧美综合在线观看 | 操碰网| 久久精品a一级国产免视看成人 | 久久精品一二三区 | 97中文字幕第一一一页 | 成人三级电影网址 | 欧美18一19sex性护士农村 | 男女无套免费视频 | 成人黄色网战 | 免费观看又色又爽又黄的崩锅 | 韩国草草影院 | 久久久精品视频免费 | 国产精品啪 | 成人毛片免费网站 | 黄色小视频免费在线观看 | 狠狠久久 | av在线免费看网站 | 91社影院在线观看 |