Realisieren Sie die Breadcrumb-Funktion basierend auf den Matched-Daten des Vue-Routers

Realisieren Sie die Breadcrumb-Funktion basierend auf den Matched-Daten des Vue-Routers

In diesem Artikel wird hauptsächlich die Breadcrumb-Funktion vorgestellt, die auf dem Matching von Vue-Router basiert, und mit Ihnen geteilt. Die Einzelheiten sind wie folgt:

Wie im obigen Bild gezeigt, handelt es sich hierbei um einen üblichen Breadcrumb-Effekt. Im Allgemeinen weist der Inhalt von Breadcrumbs eine bestimmte hierarchische Beziehung auf. Nehmen wir das obige Bild als Beispiel: Rufen Sie zuerst die Homepage auf, klicken Sie dann auf die linke Navigation, um die Aktivitätslistenseite unter Aktivitätsverwaltung aufzurufen, und klicken Sie dann auf ein Datenelement, um die Aktivitätsdetailseite aufzurufen.

Dies ist genau dasselbe Prinzip wie das Ergebnis, das durch das Mached-Attribut des Vue-Routers erzielt wird, sodass auf dieser Grundlage der Breadcrumb-Effekt erzielt werden kann!

Hier habe ich die Breadcrumb-Komponente und die Navigationsmenü-Komponente von Elementui verwendet. Hier ist das endgültige Effektbild:

Routing-Konfiguration

Projektstruktur:

Die seitliche Navigationsleiste wird auf der Startseite sowie auf den Seiten für elektronische und digitale Inhalte sowie für Kleidung und Schuhe angezeigt. Daher habe ich eine Layoutkomponente erstellt, die Komponenten dieser drei Routen auf die Komponente gerichtet und die Navigationsleiste und die Breadcrumbs in die Layoutkomponente geschrieben.

Da die Implementierung dieser Funktion von der hierarchischen Verschachtelungsbeziehung der Routen abhängt, muss die Konfiguration der Routen im Voraus geplant werden. Meine Routenkonfiguration sieht wie folgt aus:

const Routen = [
 //Leere Route abgleichen und zur Root-Route umleiten {
        Weg:'',
        Umleitung: '/home',
        Meta:{
            showInbreadcrumb:false
        }
    },
    //Stammroute {
        Pfad: „/home“,
        Komponente: ()=>import('@/views/layout/index.vue'),
        Name: 'Heimat',
        Meta:{
            Titel:"Home",
            showInbreadcrumb:true
        }
    },
    //Elektronisch digital {
        Pfad: '/Elektronik',
        Name:'Elektronisch Digital',
        Komponente: ()=>import('@/views/layout/index.vue'),
        Weiterleitung: '/elektronik/computer',
        Meta:{
            Titel:"Elektronisch Digital",
            showInbreadcrumb:true
        },
        Kinder:[
            {
                Pfad: „Computer“,
                Name: 'Computer',
                Komponente()=>Import('@/views/electronics/children/computer/index.vue'),
                Meta:{
                    Titel:"Computer",
                    showInbreadcrumb:true
                }
            },
            {
                Pfad: „Telefon“,
                Name: „Mobiltelefon“,
                Komponente: ()=>import('@/views/electronics/children/phone/index.vue'),
                Meta:{
                    Titel:"Mobiltelefon",
                    showInbreadcrumb:true
                }
            },
            {
                Pfad: „tv“,
                Name:'Fernseher',
                Komponente: ()=>import('@/views/electronics/children/tv/index.vue'),
                Meta:{
                    Titel:"Fernseher",
                    showInbreadcrumb:true
                }
            }
        ]
    },
    //Kleidung, Schuhe und Hüte {
        Pfad: '/Kleidung',
        Name:'Kleidung, Schuhe und Hüte',
        Komponente: ()=>import('@/views/layout/index.vue'),
        Weiterleitung: '/Kleidung/Oberteile',
        Meta:{
            Titel: "Kleidung, Schuhe und Hüte",
            showInbreadcrumb:true
        },
        Kinder:[
            {
                Pfad: „tops“,
                Name:'Oberteile',
                Komponente: ()=>import('@/views/clothing/children/tops/index.vue'),
                Meta:{
                    Titel:"Oberteile",
                    showInbreadcrumb:true
                }
            },
            {
                Pfad: „unterer“,
                Name:'Unterteile',
                Komponente: ()=>import('@/views/clothing/children/lower/index.vue'),
                Meta:{
                    Titel:"Unterteile",
                    showInbreadcrumb:true
                }
            },
            {
                Pfad: „Schuhe“,
                Name: 'Schuhe',
                Komponente: ()=>import('@/views/clothing/children/shoes/index.vue'),
                Meta:{
                    Titel: „Schuhe“,
                    showInbreadcrumb:true
                }
            }
        ]
    },
    //Setze es ans Ende. Wenn keine der vorherigen Routen übereinstimmt, wird diese Route übereinstimmen und zur Stammroute umgeleitet {
        Weg:'*',
        umleiten:'/',
        Meta:{
            showInbreadcrumb:false
        } 
    },   
]

Hier habe ich die Routen für Zuhause, Elektronik, Kleidung, Schuhe und Hüte konfiguriert. Diese drei sind Routen der ersten Ebene, darunter haben Elektronik, Digital und Kleidung, Schuhe und Hüte Routen der zweiten Ebene. In Meta habe ich die Daten angepasst. ShowInbreadcrumb wird verwendet, um zu bestimmen, ob in den Breadcrumbs angezeigt werden soll. Titel ist der in den Breadcrumbs angezeigte Name.

Abrufen von Routinginformationen

Vorlagenteil:

///src/views/layout/index.vue
<Vorlage>
    <div Klasse="Layout">
        <!-- Seitliche Navigationsleiste -->
        <div Klasse="Seitenmenü">
            <el-Menü
                Standardmäßig aktiv = "0"
                Klasse="el-menu-vertical-demo"
                >
                    <div v-for="(item,index) in routes" :key="index" :index="index+''">
                        <!-- Kein sekundäres Menü -->
                        <el-menu-item :index="index+''" v-if="!item.children">
                            <router-link :to="{name:item.name}">{{item.meta.title}}</router-link>
                        </el-Menüelement>
                        <!-- Mit sekundärem Menü -->
                        <el-Untermenü :index="index+''" v-else>
                            <template slot="title">{{item.meta.title}}</template>
                            <el-menu-item v-for="(item_,index_) in item.children" :key="index_" :index="index+'-'+index_">
                                <router-link :to="{name:item_.name}">{{item_.meta.title}}</router-link>
                            </el-Menüelement>
                        </el-Untermenü>
                    </div>
            </el-Menü>
        </div>
        <div Klasse="Inhalt">
            <!-- Brotkrümel -->
            <div Klasse="Brotkrümel">
                <el-breadcrumb-Trennzeichen-Klasse="el-icon-arrow-right">
                    <el-breadcrumb-item v-for="(item,index) in breadcrumb" :key="index" :to="{ path: item.path}">{{item.meta.title}}</el-breadcrumb-item>
                </el-breadcrumb>
            </div>
            <!-- Routing-Ausgang -->
            <Router-Ansicht></Router-Ansicht>
        </div>
    </div>
</Vorlage>

js-Teil:

Standard exportieren {
    Daten(){
        zurückkehren {
        }
    },
    berechnet:{
        // Seitennavigation Datenrouten(){
            // Alle Routing-Informationen aus $router.options abrufen und filtern. Return this.$router.options.routes.filter((item)=>{
                return item.meta.showInbreadcrumb
            });
        },
        // Breadcrumb-Daten breadcrumb(){
            // Filtern Sie gemäß dem Feld „showInbreadcrumb“ im Meta der Routenkonfiguration. let matchedArr = this.$route.matched.filter((item)=>{
                return item.meta.showInbreadcrumb}
            );
            // Da die Startseite etwas Besonderes ist, muss sie in den Breadcrumbs immer zuerst angezeigt werden. Wenn keine Routing-Informationen zur Startseite vorhanden sind, fügen Sie diese manuell vorne hinzu, wenn (matchedArr [0].meta.title !== 'Startseite') {
                matchedArr.unshift(
                    {
                        Pfad: „/home“,
                        Meta:{  
                            Titel:"Home",
                            showInbreadcrumb:true
                        }
                    },
                )
            }
            gib matchedArr zurück;
        },
    }
}

Hinweis: Nachdem Sie this.$route.matched erhalten haben, können Sie das Ergebnis nicht direkt anhängen und dann filtern, da sonst die Seite durcheinander geraten und ein Fehler gemeldet wird. Sie sollten zuerst filtern, wodurch ein neues Array zurückgegeben wird, und dann die Homepage-Informationen beurteilen und anhängen

Endergebnis

Dies ist das Ende dieses Artikels über die Implementierung der Breadcrumbs-Funktion basierend auf Vue-Router-Matching. Weitere relevante Vue-Router-Matching-Breadcrumbs-Inhalte 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:
  • Mehrere Möglichkeiten zum Kapseln von Breadcrumb-Funktionskomponenten in Vue3
  • Kapselungsmethode der Vue-Breadcrumbs-Komponente
  • Vue verwendet Localstorage zur Implementierung von Breadcrumbs
  • Vue element-ui implementiert dynamische Breadcrumb-Navigation
  • Vue+elementUI generiert dynamisch ein Tutorial zur Breadcrumb-Navigation
  • Detaillierte Erklärung des dynamischen Routings mit VUE+elementui Breadcrumbs
  • Beispielcode für die Breadcrumb-Navigationskomponente in Vue
  • So implementieren Sie die dynamische Breadcrumbs-Funktion von Vue
  • Vue2.0 elementUI erstellt Breadcrumb-Navigationsleiste

<<:  Lösung für das Timeout-Problem bei der Installation von Docker-Compose mit PIP

>>:  Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.22

Artikel empfehlen

Anweisungen zur Verwendung des Datenbankverbindungspools Druid

Ersetzen Sie ihn durch den optimalen Datenbankver...

Vergleich der Effizienz verschiedener Methoden zum Löschen von Dateien in Linux

Testen Sie die Effizienz des Löschens einer große...

Mybatis-Statistiken zur Ausführungszeit jeder SQL-Anweisung

Hintergrund In letzter Zeit werde ich in Intervie...

MySQL fragt den aktuellsten Datensatz der SQL-Anweisung ab (Optimierung)

Die schlechteste Option besteht darin, die Ergebn...

Native JS-Canvas zum Erzielen einer einfachen Schlange

In diesem Artikel wird der spezifische Code von J...

So richten Sie den PostgreSQL-Start unter Ubuntu 16.04 ein

Da PostgreSQL kompiliert und installiert ist, müs...

Drei Möglichkeiten zum Parsen von QR-Codes mit Javascript

Inhaltsverzeichnis 1. Verwenden Sie JavaScript, u...

Tutorial zur Installation von phpMyAdmin unter Linux centos7

yum install httpd php mariadb-server –y Notieren ...

Detaillierter Installationsprozess der MySQL 8.0 Windows-ZIP-Paketversion

Der Installationsprozess von MySQL 8.0 Windows Zi...