Ein vollständiges Beispiel für die mehrstufige Sprungfunktion (Seiten-Drilldown) von Vue für verwandte Seiten

Ein vollständiges Beispiel für die mehrstufige Sprungfunktion (Seiten-Drilldown) von Vue für verwandte Seiten

Hintergrund

Wä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.

Zweck

Vereinheitlichen Sie die zugehörige Sprungmethodenlogik jedes Projekts und kapseln Sie sie in eine einfache und benutzerfreundliche öffentliche Komponente.

Lösungsdesign

Lassen Sie uns zunächst die logischen Schritte des entsprechenden Seitensprungs analysieren:

  1. Gehen Sie zu Seite A;
  2. Springen Sie von Seite A zu Seite B;
  3. Gehen Sie zu Seite B;
  4. Zurück zu Seite A;
  5. Rufen Sie Seite A auf und kehren Sie zu Schritt 1 zurück.

Dann unterteilen Sie die obigen Schritte in folgende Punkte:

  1. Angenommen, Schritt 1 besteht darin, die Seite normal aufzurufen, und es gibt zu diesem Zeitpunkt keine zu verarbeitende Logik.
  2. Schritt 2: Sie müssen von Seite A zu Seite B springen. Um diesen Schritt durchzuführen, müssen Sie die Routing-Adresse von Seite B kennen und über VueRouter zur Routing-Adresse von Seite B springen. Und wenn Seite B Abfragedaten benötigt, sollten die Daten von Seite B gespeichert und in Schritt 3 verwendet werden.
  3. Wenn Sie nach dem Aufrufen von Seite B einige Abfragedaten von Seite A abrufen möchten, müssen Sie zunächst feststellen, ob es sich um einen Sprung von Seite A handelt. Wenn dies der Fall ist, rufen Sie die Daten von Seite A ab, wo die Daten gespeichert sind.
  4. Um von Seite B zu Seite A zurückzukehren, müssen Sie die Routing-Adresse von Seite A kennen und über VueRouter zur Routing-Adresse von Seite A springen. Die Routing-Adresse muss hier vor dem Sprung in Schritt 2 gespeichert werden, damit sie hier abgerufen werden kann;
  5. Es ist festzustellen, dass sowohl Schritt 1 als auch Schritt 5 Seite A aufrufen, die Ausführungslogik jedoch unterschiedlich ist. Wenn Seite A also vor dem Sprung zu Seite B einige Daten wiederherstellen möchte, muss sie zunächst feststellen, ob sie von Seite B zurückspringt. Wenn dies der Fall ist, holen Sie sich die Daten von Seite A vor dem Sprung von dem Ort, an dem die Daten gespeichert sind. Die Daten vor dem Sprung hierher müssen vor dem Sprung in Schritt 2 gespeichert werden, damit sie hier abgerufen werden können.

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.

Flussdiagramm

Quellseite

Zielseite

Konkrete Umsetzung

Von 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ück

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, 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 wiederherzustellen

Die 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>

Fehlertoleranz

In 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...*/

Anwendungsbeispiele

Gemäß 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...*/

Zusammenfassen

In 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:
  • Vue implementiert den automatischen Sprung zur Anmeldeseite, wenn das Token abläuft
  • So verwenden Sie Vuex, um zur Seite zu springen
  • Lösung für das Vue-Routing: Diese Seite mit dem Sprung „this.route.push“ wird nicht aktualisiert
  • So implementieren Sie Vue Page Jump
  • Vue this.$router.push(parameter) implementiert den Seitensprungvorgang
  • Übertragungsparameter und Empfangsmethoden für Vue-Seitensprünge
  • So implementieren Sie Seitensprünge in einem Vue-Projekt

<<:  Detaillierte Erklärung von count(), group by, order by in MySQL

>>:  Installieren und Konfigurieren von MySQL unter Linux

Artikel empfehlen

So finden Sie Websites mit SQL-Injection (unbedingt lesen)

Methode 1: Verwenden Sie die erweiterte Suche von...

Detailliertes Tutorial zur Installation und Deinstallation von MySql

In diesem Artikel finden Sie das Tutorial zur Ins...

Grundlegendes zu MySQL-Sperren basierend auf Update-SQL-Anweisungen

Vorwort Die MySQL-Datenbanksperre ist ein wichtig...

Pessimistisches Sperren und optimistisches Sperren in MySQL

In relationalen Datenbanken sind pessimistisches ...

Details zum JavaScript-Timer

Inhaltsverzeichnis 1. Kurze Einführung 2. Interva...

So lösen Sie das Problem, das Root-Passwort von Mysql auf dem Mac zu vergessen

Ich habe MySQL auf meinem Computer längere Zeit n...

Eine kurze Analyse der expliziten Typkonvertierung von MySQL

CAST-Funktion Im vorherigen Artikel haben wir die...

MySQL-Lösung zum Erstellen eines horizontalen Histogramms

Vorwort Histogramme sind grundlegende statistisch...

Allgemeine Probleme mit der Regelpriorität beim Nginx-Standort

Inhaltsverzeichnis 1. Standort / Matching 2. Stan...

So installieren Sie MySQL 5.7 manuell auf CentOS 7.4

MySQL-Datenbanken werden häufig verwendet, insbes...