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

Ausführliche Erläuterung der Mysql-Deadlock-Anzeige und Deadlock-Entfernung

Vorwort Vor einiger Zeit ist bei mir ein MySQL-De...

Zusammenfassung der zehn häufigsten Probleme bei MySQL-Indexfehlern

Inhaltsverzeichnis Hintergrund 1. Die Abfragebedi...

Details zur Verwendung des Vue-Slots

Inhaltsverzeichnis 1. Warum Slots verwenden? 1.1 ...

Lösung für den Fehler von 6ull beim Laden des Linux-Treibermoduls

Inhaltsverzeichnis 0x01 Das Treibermodul konnte n...

Ein kurzes Verständnis der relevanten Sperren in MySQL

Dieser Artikel soll Ihnen vor allem dabei helfen,...

Lösung für das Problem, dass MySQL Daten sehr langsam löscht und einfügt

Wenn ein Unternehmensentwickler eine Insert-Anwei...

HTML-Tutorial: Horizontales Liniensegment in HTML

<br />Dieses Tag kann eine horizontale Linie...

Wie wird die Transaktionsisolation von MySQL erreicht?

Inhaltsverzeichnis Gleichzeitige Szenarien Schrei...

Lösung für 1067, wenn Mysql in Windows startet

Ich habe erst vor ein paar Tagen mit der Arbeit b...

Vergleich zweier Implementierungsmethoden der Vue-Dropdown-Liste

Zwei Implementierungen der Vue-Dropdown-Liste Die...