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

Detailliertes Beispiel für die Verwendung von useState in React

Verwendungsstatus useState fügt einer Komponente ...

Vue + node realisiert Audioaufzeichnungs- und -wiedergabefunktion

Ergebnis: Der Hauptteil besteht darin, die Codelo...

Analyse und Lösung des durch Chrome 73 verursachten Flex-Layout-Zusammenbruchs

Phänomen Es gibt mehrere verschachtelte Flex-Stru...

JavaScript zum Erzielen eines Fortschrittsbalkeneffekts

In diesem Artikelbeispiel wird der spezifische Ja...

Detaillierte Erläuterung des Docker-Arbeitsmodus und -Prinzips

Wie in der folgenden Abbildung dargestellt: Wenn ...