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

Detaillierte Erklärung des Overlay-Netzwerks in Docker

Übersetzt aus der offiziellen Docker-Dokumentatio...

Implementierung der Fastdfs+Nginx-Clusterkonstruktion

1. Einführung in Fastdfs 1. Was ist Fastdfs? Fast...

Lösung für MySQL-Replikationsfehler aufgrund voller Festplatte

Inhaltsverzeichnis Fallbeispiel Lösung des Proble...

Detaillierte Schritte zur Installation von Docker 1.8 auf CentOS 7

Docker unterstützt die Ausführung auf den folgend...

Docker+Nextcloud zum Erstellen eines persönlichen Cloud-Speichersystems

1. Docker-Installation und -Start yum installiere...

Detaillierte Erläuterung des Befehls zum Bereinigen des MySQL-Datenbank-Binlogs

Überblick Heute werde ich hauptsächlich erklären,...

VMware ESXI-Servervirtualisierungscluster

Inhaltsverzeichnis Zusammenfassung Umgebung und W...

Importieren von CSS-Dateien unter Verwendung von Beurteilungsbedingungen

Lösung 1: Verwenden Sie bedingten Import im HTML-...

Eine vollständige Liste häufig verwendeter HTML-Tags und ihrer Eigenschaften

Zunächst müssen Sie einige Eigenschaften von HTML...

Persönliche Meinung: Sprechen Sie über Design

<br />Wählen Sie das praktischste Thema aus....