Anforderungen aus der ProjektpraxisDerselbe Link muss verschiedene Seitenkomponenten laden. Abhängig von den vom Benutzer erworbenen Diensten werden unterschiedliche Seiten angezeigt. Es gibt einige schlechte Implementierungen
Ich persönlich bin der Meinung, dass der bessere Weg zur UmsetzungAbrufen der Serverdaten, auf denen die Route konfiguriert ist, und dynamisches Laden der entsprechenden Komponenten { Pfad: 'shopKPI', // Wenn Sie die Hintergrunddaten vorab im Store speichern, können Sie sie direkt beurteilen, indem Sie hier auf die Store-Daten zugreifen. // Die Daten dieser spezifischen Unternehmensseite werden jedoch im globalen Store abgelegt und nirgendwo anders verwendet. Sie sind daher wirklich unnötig. Komponente: () => import('@/views/store/dataVersion'), Name: 'store_KPI', menuName: 'Shop-Berater', Meta: { Codes: ['storeProduct.detail'] } } Das Ideal ist schön, aber die Realität sieht so aus, dass die von der Komponente empfangene Methode synchron ein Versprechen zurückgeben muss. Zu diesem Zeitpunkt dachte ich an die schlechte Implementierungsmethode 1 oben und änderte sie leicht. <!-- ChooseShopKPI.vue --> <Vorlage> <dataVersion v-if="!useNewShopKPI" /> <ShopKPI v-else /> </Vorlage> <Skript> importiere { get } von 'lodash'; importiere { getStoreReportFormVersion } von '@/api/store'; importiere dataVersion aus „./dataVersion“; importiere ShopKPI aus „./ShopKPI“; Standard exportieren { Name: 'ChooseShopKPI', Komponenten: Datenversion, ShopKPI, }, Daten() { return { useNewShopKPI: false }; }, erstellt() { getStoreReportFormVersion().then((res) => { wenn (get(res, 'data.data.new')) { this.useNewShopKPI = wahr; } }); }, }; </Skript> <style lang="css" scoped></style> Ändern Sie die Seite, die der Routendarstellung entspricht, um diese Zwischenseite ChooseShopKPI darzustellen { Pfad: 'shopKPI', // Wenn Sie die Hintergrunddaten im Voraus erhalten, können Sie sie direkt beurteilen, indem Sie hier auf die Store-Daten zugreifen. // Die Daten dieser bestimmten Geschäftsseite werden jedoch im globalen Store abgelegt und nirgendwo anders verwendet. Daher sind sie wirklich nicht erforderlich. - Komponente: () => import('@/views/store/dataVersion'), + Komponente: () => import('@/views/store/ChooseShopKPI'), Name: 'store_KPI', menuName: 'Shop-Berater', Meta: { Codes: ['storeProduct.detail'] } } Dadurch wird die erwartete Funktionalität erreicht. Die Funktion wurde realisiert, aber ich habe wieder angefangen, darüber nachzudenkenAllerdings löst diese Methode das Problem des dynamischen Ladens von Seitenkomponenten sehr gut. Es traten jedoch auch einige kleinere Probleme auf.
Die endgültige Lösung - High-Level-KomponentenDurch Abstrahieren von ChooseXXX wird es in DynamicLoadComponent umgewandelt <!-- DynamicLoadComponent.vue --> <Vorlage> <Komponente: ist = "comp" /> </Vorlage> <Skript> Standard exportieren { Name: "DynamicLoadComponent", Requisiten: { Renderkomponente: { Typ: Versprechen, }, }, Daten() { zurückkehren { comp: () => diese.renderComponent } }, montiert() {}, }; </Skript> <style lang="css" scoped></style> Holen Sie sich die Hintergrunddaten direkt in die Routing-Konfiguration und verteilen Sie die Routen. Auf diese Weise wird die Routing-Logik in der Routing-Konfigurationsdatei konzentriert und es gibt kein sekundäres Routing. Die Wartung wird kein Problem sein. Die Komponente DynamicLoadComponent kann auch wiederverwendet werden und alle nachfolgenden Routing-Konfigurationen zum Bestimmen der Seite zum Laden von Hintergrunddaten können an diese Zwischenkomponente weitergeleitet werden. { Pfad: 'shopKPI', Komponente: () => import('@/views/store/components/DynamicLoadComponent'), Name: 'store_KPI', menuName: 'Shop-Berater', Meta: { Codes: ['storeProduct:detail'], }, Requisiten: (Route) => ({ renderComponent: neues Promise((auflösen, ablehnen) => { getStoreReportFormVersion() .then((responseData) => { const useNewShopKPI = get(responseData, 'data.data.shop_do'); const useOldShopKPI = get( Antwortdaten, „Daten.Daten.Speichern_Daten_Anzeigen“ ); wenn (useNewShopKPI) { lösen (importieren ('@/views/store/ShopKPI')); } sonst wenn (useOldShopKPI) { lösen (importieren ('@/views/store/dataVersion')); } anders { lösen(importieren('@/views/store/ShopKPI/NoKPIService')); } }) .fangen(ablehnen); }), }) } Onlinebeispiel ansehen (unterstützt nur Chrome) Dies ist das Ende dieses Artikels über das Laden verschiedener Komponenten durch Vue Router je nach Hintergrunddaten. Weitere Informationen zum Laden verschiedener Komponenten durch Vue Router je nach Hintergrunddaten finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Lösung für FEHLER 1054 (42S22) beim Ändern des Passworts in MySQL 5.7
>>: Lösung für den MySQL-Server-Anmeldefehler ERROR 1820 (HY000)
Inhaltsverzeichnis 1. JavaScript-Probleme 2. Vort...
Bei Linux-Operationen ersetzen und zählen wir häu...
Zen-Codierung Es ist ein Texteditor-Plugin. In ei...
Verwenden Sie den Linux-Befehl chmod , um zu steu...
Häufig verwendeter JavaScript-Code zum Erkennen d...
Schauen wir uns zunächst die offizielle MySQL-Dok...
Moores Gesetz gilt nicht mehr Seit der Übernahme ...
In diesem Artikel wird der spezifische Code von n...
(Teil 4) Webstandards bestehen aus einer Reihe von...
Dieser Artikel zeichnet die Installations- und Ko...
In diesem Artikel finden Sie das grafische Tutori...
Wenn wir einmal von Datenbanken absehen, was ist ...
1. Überprüfen Sie nach der Verbindung und Anmeldu...
Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...
Inhaltsverzeichnis Vorwort Die Notwendigkeit von ...