Beispiel für eine automatische Importmethode für das Vue3.0-Routing

Beispiel für eine automatische Importmethode für das Vue3.0-Routing

1. Voraussetzungen

Wir verwenden zum Importieren die Methode require.context. Wenn wir sie in einem von vite erstellten Projekt verwenden, wird der Fehler „require not found“ gemeldet. Daher müssen wir zum Erstellen eines Projekts webpack verwenden. Oder kann mir jemand sagen, wie Vite dieses Problem lösen kann.

II. Regeln

Die von uns verwendete Regel besteht darin, alle Verzeichnisse und Unterverzeichnisse unter dem Pfad src/views/ zu durchsuchen, nach Dateien mit dem Namen „index.vue“ zu suchen und den Namen des übergeordneten Verzeichnisses als Komponentennamen für die Registrierung zu verwenden. Der Aufbau ist wie folgt:

Wie bei der öffentlichen Komponentenregistrierung registrieren wir nur die Komponente index.vue und Komponenten mit anderen Namen werden nicht registriert.

3. Import

// src/router/index.ts

importiere {createRouter, createWebHashHistory, createWebHistory, RouteRecordRaw} von 'vue-router'
Store aus „@/store“ importieren;
importiere daxie von "@/util/upper"; // Führe eine Methode ein, um den ersten Buchstaben eines Strings groß zu schreiben. Ich bin es gewohnt, den ersten Buchstaben des Pfadnamens groß zu schreiben. // Automatische Routing-Registrierung const routerList:any = []
const requireComponent = require.context('@/views', true, /index.vue$/) // Alle Dateien unter dem Ansichtspfad suchen const dynamic_route = requireComponent.keys().filter(fileName => {
    returniere wahr
})
// Jetzt ist das Dateiarray nicht in der richtigen Reihenfolge. Wir sortieren es zuerst, mit der übergeordneten Route an erster Stelle. Wenn die untergeordnete Route an erster Stelle steht und die übergeordnete Route nicht erstellt wurde, wird ein Fehler gemeldet. // console.log(dynamic_route,"Vor dem Sortieren")
dynamic_route.sort(Funktion (a,b):Nummer{
    const jieguoa:any = a.split("").filter((item:string)=>{
        return "/" == Artikel
    })
    const jieguob:any = b.split("").filter((item:string)=>{
        return "/" == Artikel
    })
    wenn (jieguoa.Länge<jieguob.Länge){return -1}
    wenn(jieguoa.Länge>jieguob.Länge){return 1}
    Rückgabe 0
})

// console.log(dynamic_route,"nach dem Sortieren")


dynamic_route.forEach(Dateiname => {
    const Pfad = Dateiname.replace(".", "")
    const namelist = fileName.replace(".", "").replace("index.vue", "").split("/").filter((i:any) => {
        Rückkehr ich
    })
    // Testkonfiguration const componentConfig = requireComponent(Dateiname)
    // Die Komponente kann nach Belieben beliebige Attribute hinzufügen. Derzeit wird ein Canshu-Attribut hinzugefügt, ein Array, das die erforderlichen dynamischen Parameter speichert. // console.log(componentConfig.default,"Komponentenkonfiguration 2")
    // Jede Ebene muss manuell angegeben werden, also führen Sie einfach drei Ebenen aus, if (namelist.length == 1) {
        routerList.push({
            Pfad:"/"+ Namensliste[Namensliste.Länge - 1],
            Name: daxie(Namensliste[Namensliste.Länge-1]),
            Komponente:()=>import(`../views${path}`),
            Kinder:[],
        })
    }sonst wenn(Namensliste.Länge == 2){
        routerList.fürJeden((item:any)=>{
            wenn(item.name == daxie(namelist[0])){
                // Bestimmen Sie, ob die Komponente Parameter benötigt const canshu = componentConfig.default.canshu || []
                wenn(kannst du){
                    für (lass i=0;i<canshu.length;i++){
                        canshu[i] = "/:"+canshu[i]
                    }
                    Artikel.Kinder.push({
                        Pfad: Namensliste[Namensliste.Länge-1] + canshu.join(""),
                        Name: daxie(Namensliste[Namensliste.Länge-1]),
                        Komponente:()=>import(`../views${path}`),
                        Kinder:[],
                    })
                }anders{
                    Artikel.Kinder.push({
                        Pfad: Namensliste[Namensliste.Länge-1],
                        Name: daxie(Namensliste[Namensliste.Länge-1]),
                        Komponente:()=>import(`../views${path}`),
                        Kinder:[],
                    })
                }
            }
        })
    }sonst wenn(Namensliste.Länge == 3){
        routerList.fürJeden((item:any)=>{
            wenn(item.name == daxie(namelist[0])){
                item.children.forEach((yuansu:any)=>{
                    wenn (yuansu.name == daxie(namensliste[1])){
                        // Bestimmen Sie, ob der Parameter erforderlich ist const canshu = componentConfig.default.canshu || []
                        wenn(kannst du){
                            für (lass i=0;i<canshu.length;i++){
                                canshu[i] = "/:"+canshu[i]
                            }
                            yuansu.Kinder.push({
                                Pfad: Namensliste[Namensliste.Länge - 1]+canshu.join(""),
                                Name: daxie(Namensliste[Namensliste.Länge-1]),
                                Komponente:()=>import(`../views${path}`),
                            })
                        }anders {
                            yuansu.Kinder.push({
                                Pfad: Namensliste[Namensliste.Länge - 1],
                                Name: daxie(Namensliste[Namensliste.Länge-1]),
                                Komponente:()=>import(`../views${path}`),
                            })
                        }
                    }
                })
            }
        })
    }
})
const routes: Array<RouteRecordRaw> = [
    {
        Weg: '/',
        Name: "Home",
        Komponente: ()=>import("@/views/shouye/shouye.vue")
    },
    {
        Pfad: '/about',
        Name: 'Über',
        Komponente: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
    },
    ...Routerliste,
    {
        Pfad: '/404',
        Name: '404',
        Komponente: () => import('@/views/404.vue')
    },
    {
        Pfad: '/:pathMatch(.*)',
        Umleitung: '/404'
    },
]
// Achten Sie auf die Reihenfolge. Nach den neuesten Routing-Matching-Regeln muss die 404-Seite am Ende stehen.
console.log(routes,"Den Inhalt der Routing-Tabelle anzeigen")

const router = createRouter({
    Verlauf: createWebHistory(),
    // Verlauf: createWebHashHistory(),
    Routen
})

Standardrouter exportieren

Auf diese Weise müssen Sie nur Komponenten gemäß den Regeln erstellen und diese werden automatisch in der Route registriert. Machen Sie Schluss mit der mühsamen manuellen Registrierung.

Zusammenfassen

Dies ist das Ende dieses Artikels über den automatischen Import von vue3.0-Routen. Weitere relevante Inhalte zum automatischen Import von vue3.0-Routen finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Vue3.0 CLI - 3.2 Grundlegendes Routing-Tutorial
  • Beispiel für eine Routing-Berechtigungsverwaltungsmethode in Vue2/vue3
  • Ein einfaches Beispiel für die Verwendung von Vue3-Routing VueRouter4

<<:  So verwenden Sie cutecom für die serielle Kommunikation in einer virtuellen Ubuntu-Maschine

>>:  Verwenden von Docker zum Erstellen statischer Website-Anwendungen (mehrere Möglichkeiten)

Artikel empfehlen

Best Practices-Handbuch zum Speichern von Daten in MySQL

Inhaltsverzeichnis Vorwort Verwenden Sie keine Ze...

Detaillierte Erklärung der integrierten Methoden des Javascript-Arrays

Inhaltsverzeichnis 1. Array.at() 2. Array.copyWit...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.13

In diesem Artikel finden Sie das Installations- u...

React führt antd-mobile+postcss ein, um ein mobiles Terminal zu erstellen

Installieren Sie antd-mobile Globaler Import npm ...

Beispiel für die Konfiguration von Nginx im CentOS-Server

Laden Sie das sichere Terminal MobaXterm_Personal...

WeChat-Applet-Canvas implementiert Signaturfunktion

Im WeChat-Applet-Projekt umfasst das Entwicklungs...

Der Unterschied und die Wahl zwischen Datum und Uhrzeit und Zeitstempel in MySQL

Inhaltsverzeichnis 1 Unterschied 1.1 Raumbelegung...

Detaillierte Analyse der Replikation in MySQL

1.MySQL-Replikationskonzept Dies bedeutet, dass d...

Docker Compose-Übung und Zusammenfassung

Docker Compose kann die Orchestrierung von Docker...