HintergrundWährend des Projektentwicklungsprozesses müssen Sie häufig von der vorherigen Seite zur nächsten Seite springen (gemeinhin als „Drilldown“ bezeichnet). Wenn Sie beispielsweise Details der Daten auf der Übersichtsseite anzeigen müssen, klicken Sie auf ein Diagramm oder eine Schaltfläche, um zur Detailseite zu springen und die detaillierten Daten anzuzeigen. Bisher gibt es in unserem Projekt keine einheitliche Methode zum Seitenspringen, und die Art und Weise, wie Seitensprünge implementiert werden, ist von Person zu Person unterschiedlich. Darüber hinaus können viele vorhandene Projekte nur zwischen zwei Seiten hin- und herspringen, und es gibt grundsätzlich keine vollständige Funktion zum Springen zwischen mehreren Seiten. Da es sich bei verwandten Seitensprüngen um eine allgemeine Funktion des Projekts handelt, wird eine sich stark wiederholende Codelogik ausgeführt. Es ist sehr wichtig, die relevante Logik zu extrahieren und in einfache und leicht zu verwendende öffentliche Methoden und öffentliche Komponenten zu kapseln. ZweckVereinheitlichen Sie die zugehörige Sprungmethodenlogik jedes Projekts und kapseln Sie sie in eine einfache und benutzerfreundliche öffentliche Komponente. LösungsdesignLassen Sie uns zunächst die logischen Schritte des entsprechenden Seitensprungs analysieren:
Dann unterteilen Sie die obigen Schritte in folgende Punkte:
Um die obige Logik zu implementieren, bestimmen wir als Nächstes zunächst die Methode, mit der die Daten von Seite A und Seite B gespeichert werden. Hier wird VUEX verwendet. Sortieren Sie die obigen logischen Schritte noch einmal und zeichnen Sie ein Flussdiagramm. FlussdiagrammQuellseite Zielseite Konkrete UmsetzungVon der Quellseite zur Zielseite springen Die Logik dieses Schritts ist in VUEX geschrieben. Rufen Sie jedes Mal, wenn Sie diesen Schritt ausführen müssen, einfach die entsprechende Methode in VUEX auf. Die spezifische Implementierungslogik besteht darin, zuerst die Kennungen der Quellseite und der Zielseite zu den Routing-Parametern hinzuzufügen (um zu unterscheiden, ob die aktuelle Seite die Zielseite oder die zurückgegebene Quellseite ist), dann die Daten der Quellseite und der Zielseite zu speichern und dann den Routing-Sprung auszuführen. Fügen Sie die folgenden zwei Variablen in store.js hinzu: tgtPageParams: {}, // Zielseitendaten für den zugehörigen Sprung (es bleibt nur ein Element erhalten) srcPageParams: [], // Quellseitendaten des zugehörigen Sprunges (Array-Typ, behält Daten mehrerer Seiten, kann in mehreren Ebenen zurückgegeben werden, bis zur Rückkehr zur Ausgangsseite) Fügen Sie dann die folgende Methode hinzu: // Sprung verknüpfen, zur Zielseite springen und die Daten der Quellseite und der Zielseite in Vuex speichern goTargetPage(Status, Optionen) { // Fügen Sie der Abfrage der Quellseite den Bezeichner tgtPageName hinzu, um sich die Zielseite zu merken options.srcParams.query = Object.assign({}, options.srcParams.query, { tgtPageName: options.tgtParams.name }); // Fügen Sie srcPageName zur Abfrage der Zielseite hinzu, um sich die Quellseite zu merken options.tgtParams.query = Object.assign({}, options.tgtParams.query, { srcPageName: options.srcParams.name }); state.srcPageParams.push(options.srcParams); // Quellseitendaten speichern state.tgtPageParams = options.tgtParams; // Zielseitendaten speichern router.push({ name: options.tgtParams.name, query: options.tgtParams.query }); // Zur Zielseite springen }, Die Zielseite kehrt zur Quellseite zurückDie Logik dieses Schritts ist in VUEX geschrieben. Rufen Sie jedes Mal, wenn Sie diesen Schritt ausführen müssen, einfach die entsprechende Methode in VUEX auf. Die spezifische Implementierungslogik besteht darin, die Quellseitendaten (einschließlich Routing-Adresse und Parameter) von state.srcPageParams abzurufen und dann einen Routing-Sprung durchzuführen. Fügen Sie in VUEX die folgende Methode hinzu: // Sprung assoziieren, zurück zur Quellseite springen goSourcePage(state, vm) { let obj = state.srcPageParams.slice(-1)[0]; // Nimm das letzte Element des Arrays // Wenn Vuex Daten von der vorherigen Seite hat, kehre basierend auf den Daten von Vuex zur vorherigen Seite zurück if (obj && Object.keys(obj).length > 0) { router.push({ name: obj.name, query: obj.query }); // Umleitung } // Wenn in Vuex keine Daten von der vorherigen Seite vorhanden sind, aber auf der Route ein Flag für die vorherige Seite vorhanden ist, kehren Sie gemäß dem Routen-Flag zur vorherigen Seite zurück (um das Problem zu vermeiden, dass Vuex-Daten verloren gehen und beim Aktualisieren der Detailseite nicht zur vorherigen Seite zurückgekehrt werden kann). sonst wenn (vm && vm.$route.query.srcPageName) { router.push({ name: vm.$route.query.srcPageName }); } }, Rufen Sie die Zielseite auf und verwenden Sie VUEX-Daten/kehren Sie zur Quellseite zurück, um VUEX-Daten wiederherzustellenDie Logik dieses Schritts besteht darin, Schritt 3 und Schritt 5 im obigen Lösungsdesign zu kombinieren und sie in die öffentliche Funktionsdatei zu schreiben. Jedes Mal, wenn Sie diesen Schritt ausführen müssen, können Sie die entsprechende Methode in Vue.prototype direkt aufrufen. Die konkrete Implementierungslogik lautet: Bestimmen Sie, ob die aktuelle Seite die Quellseite oder die Zielseite ist. Wenn es die Zielseite ist, verwenden Sie die von der Quellseite übergebenen Daten. Wenn es die Quellseite ist, stellen Sie die Daten vor dem Sprung wieder her. Fügen Sie der öffentlichen Funktionsdatei utils.js die folgende Methode hinzu und hängen Sie sie an Vue.prototype an: /** * Mit dieser Methode können sprungbezogene Seiten verknüpft werden. * 1. Quellseite: Die in Vuex gespeicherten Daten können in verwendungsfähige Daten wiederhergestellt werden. * 2. Zielseite: Die von der Quellseite an Vuex übergebenen Daten können in verwendungsfähige Daten umgewandelt werden. * 3. Nachdem die Quellseitendaten wiederhergestellt wurden, löschen Sie die entsprechenden Sicherungsdaten in Vuex und löschen Sie die auf der Route gespeicherte Zielseitenkennung. * @param vm {object} Erforderliche aktuelle Vue-Komponenteninstanz * / $changeVueData: (vm) => { Lassen Sie tgtParams = store.state.tgtPageParams; let srcParams = vm.$store.state.srcPageParams.slice(-1)[0] || {}; // Den letzten Elementwert abrufen let name = vm.$route.name; let query = vm.$deepCopyJSON(vm.$route.query); // Die tiefe Kopie hier liegt daran, dass $route.query aktualisiert werden muss // Bestimmen Sie, ob die aktuelle Seite die Zielseite oder die Quellseite ist // Die Beurteilungsbedingung besteht darin, zuerst zu bestimmen, ob der Routenname konsistent ist, und dann zu bestimmen, ob der Attributwert der angegebenen Abfrage ebenfalls konsistent ist let isTgtPage = tgtParams.name === name && (tgtParams.checkKeys ? tgtParams.checkKeys.every(Schlüssel => tgtParams.query[Schlüssel] === Abfrage[Schlüssel]) : true); let isSrcPage = srcParams.name === name && (srcParams.checkKeys ? srcParams.checkKeys.every(Schlüssel => srcParams.query[Schlüssel] === Abfrage[Schlüssel]) : true); // Wenn die aktuelle Seite die Zielseite ist if (isTgtPage) { Object.assign(vm.$data, tgtParams.data || {}); // Aktualisieren Sie die von der Quellseite an die Daten() der aktuellen Seite übergebenen Daten, damit die Seite sie abfragen kann.} // Wenn die aktuelle Seite die Quellseite ist if (isSrcPage) { Object.assign(vm.$data, srcParams.data || {}); // Aktualisiere die vor dem Sprung zu data() der aktuellen Seite gespeicherten Daten, damit die Seite wiederhergestellt werden kann store.commit('popSourcePage'); // Lösche das letzte Datenelement von srcPageParams // Nachdem die mit der Quellseite verknüpfte Sprunglogik abgeschlossen ist, lösche die Zielseitenkennung auf der aktuellen Seitenroute, um Probleme beim Aktualisieren der Seite zu vermeiden delete query.tgtPageName; vm.$router.push({ Name, Abfrage }); } }, Schaltfläche „Zurück zur vorherigen Seite“Um die zugehörige Sprungfunktion bequemer nutzen zu können, wird die Schaltfläche „Zurück zur vorherigen Seite“ in eine Komponente gekapselt. Der spezifische Implementierungscode lautet wie folgt: // Zurück-Schaltfläche.vue <Vorlage> <button class="primary-btn return-btn" v-if="showBackBtn" @click="backFn"> <i class="return-icon"></i>{{ backText }} </button> </Vorlage> <Skript> Standard exportieren { Name: 'Zurück-Schaltfläche', Requisiten: { // Zurück zum Text der vorherigen Seite backText: { Typ: Zeichenfolge, default: () => 'Vorheriger Schritt' }, // Funktion zum Zurückkehren zur vorherigen Seite backFn: { Typ: Funktion, Standard: () => {} } }, Daten() { zurückkehren { showBackBtn: falsch, }; }, montiert() { dies.setBackBtnShow(); }, aktiviert() { dies.setBackBtnShow(); }, Methoden: { // Aktualisiere den Status der Schaltfläche, um zur vorherigen Seite zurückzukehren setBackBtnShow() { dies.$nextTick(() => { Lassen Sie srcPage = this.$store.state.srcPageParams.slice(-1)[0]; this.showBackBtn = Boolean(srcPage && Object.keys(srcPage).length > 0); }); }, }, }; </Skript> <style scoped lang="scss"> </Stil> FehlertoleranzIn Anbetracht der Tatsache, dass der Benutzer während des Assoziationssprungs die Seite plötzlich unterbrechen oder aktualisieren oder andere abnormale Vorgänge ausführen kann, wurden einige Fehlertoleranzmechanismen entwickelt: // Stammkomponente App.vue /*...Code ausgelassen...*/ betrachten: // Hören Sie zu, führen Sie es aus, wenn sich die Route ändert $route(to, from) { // Wenn es weder die Quellseite noch die Zielseite ist, lösche die in Vuex gespeicherten Daten // Verhindere, dass während des zugehörigen Sprungs Menüs gewechselt oder andere Vorgänge ausgeführt werden, da dies zu Restdaten vom letzten zugehörigen Sprung in Vuex führen würde, if (!to.query.srcPageName && !to.query.tgtPageName) { dies.$store.commit('clearTargetPage'); dies.$store.commit('clearSourcePage'); } }, }, /*...Code ausgelassen...*/ AnwendungsbeispieleGemäß dem obigen Schema entwerfen Sie Teilschritte: Schritt 1 und Schritt 5, Seite A aufrufen, die Logik befindet sich auf derselben Seite, der Code lautet wie folgt: // Seite A.vue /*...Code ausgelassen...*/ montiert() { vm = dies; vm.$changeVueData(vm); // Zu verwandten Seiten springen. Jedes Mal, wenn Sie eine Seite aufrufen, müssen Sie die Funktion $changeVueData ausführen. Informationen zur spezifischen Verwendung finden Sie im Kommentar der aufrufenden Methode. vm.ready(); }, /*...Code ausgelassen...*/ Schritt 2, Springen Sie von Seite A zu Seite B, der Code lautet wie folgt: // Seite A.vue /*...Code ausgelassen...*/ Methoden: { // Gehe zu Seite B goUserSituation: function (name) { lass srcParams = { Name: vm.$route.name, Abfrage: vm.$route.query }; let tgtParams = { Name: 'Benutzersituation', Daten: { geprüftesSystem: Name } }; vm.$goTargetPage(srcParams, tgtParams); }, }, /*...Code ausgelassen...*/ Schritt 3, rufen Sie Seite B auf, der Code lautet wie folgt: // Seite B.vue /*...Code ausgelassen...*/ montiert() { vm = dies; vm.$changeVueData(vm); // Zu verwandten Seiten springen. Jedes Mal, wenn Sie eine Seite aufrufen, müssen Sie die Funktion $changeVueData ausführen. Informationen zur spezifischen Verwendung finden Sie im Kommentar der aufrufenden Methode. vm.ready(); }, /*...Code ausgelassen...*/ Schritt 4, zurück zu Seite A, der Code lautet wie folgt: // Seite B.vue /*...Code ausgelassen...*/ <Vorlage> <div> <ZurückButton :backFn="$goSourcePage"></ZurückButton> /*...Code ausgelassen...*/ </div> </Vorlage> /*...Code ausgelassen...*/ ZusammenfassenIn diesem Artikel wird die Implementierung der mehrstufigen Sprungfunktion (Seiten-Drilldown) verknüpfter Seiten ausführlich vorgestellt. Die Kernidee besteht darin, die Daten der verknüpften Sprungquellseite und der Zielseite durch die globale Statusverwaltung von VUEX zu speichern. Vor dem Sprung werden die erforderlichen Daten gespeichert. Beim Springen zur Zielseite werden die von der Zielseite benötigten Daten von VUEX abgerufen. Beim Zurückspringen zur Quellseite werden die Daten der Quellseite von VUEX wiederhergestellt. Durch die Kapselung dieser wichtigen Aktionen in gemeinsame Methoden und Komponenten werden nicht nur die zugehörigen Seitensprungmethoden jedes Projekts vereinheitlicht, sondern auch die Qualität des Codes verbessert und die spätere Wartung erleichtert. Darüber hinaus wird im Artikel nur ein Teil des Fehlertoleranzteils beschrieben. Wenn Sie diese Funktion in Zukunft weiter verbessern müssen, können Sie den Fehlertoleranzteil verbessern. Dies ist das Ende dieses Artikels über die Implementierung der Multi-Level-Jump-Funktion (Seiten-Drilldown) für verwandte Seiten durch Vue. Weitere relevante Inhalte zu Multi-Level-Jump-Seiten von Vue 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:
|
<<: Detaillierte Erklärung von count(), group by, order by in MySQL
>>: Installieren und Konfigurieren von MySQL unter Linux
Methode 1: Verwenden Sie die erweiterte Suche von...
Ohne weitere Umschweife hier ein Demobild. Die im...
In diesem Artikel wird der spezifische JavaScript...
In diesem Artikel finden Sie das Tutorial zur Ins...
Vorwort Die MySQL-Datenbanksperre ist ein wichtig...
In relationalen Datenbanken sind pessimistisches ...
Inhaltsverzeichnis 1. Kurze Einführung 2. Interva...
Eine sehr nützliche Funktion group_concat(), im H...
Ich habe MySQL auf meinem Computer längere Zeit n...
Erklären Sie den gesamten Prozess von CLion von G...
CAST-Funktion Im vorherigen Artikel haben wir die...
Vorwort Histogramme sind grundlegende statistisch...
Inhaltsverzeichnis 1. Standort / Matching 2. Stan...
MySQL-Datenbanken werden häufig verwendet, insbes...
Fügen Sie der Seite einen DOCTYPE hinzu Da versch...