Themen dynamisch ändernAls Erstes müssen Sie herausfinden, welches Design Sie anzeigen möchten, und es dynamisch umschalten. Die von mir gewählte Methode ist queryString. Wenn wir die URL öffnen, können wir am Ende ?theme=xx hinzufügen, dieses xx lesen und speichern. Die erste Methode: dynamische KomponentenWenn sich die Route des Designs nicht geändert hat, sondern nur der Stil und die Funktion innerhalb der Komponente geändert haben, können wir eine Komponente kopieren, ändern und sie durch Lazy Loading und dynamische Komponenten implementieren. // Seitenkomponente <template> <div> <Komponente: ist = "Themenname" /> </div> </Vorlage> <Skript> Standard exportieren{ Name: "Home", Komponenten: { Thema1:()=>importieren('@/Thema/Thema1/a'), Thema2:()=>importieren('@/Thema/Thema2/a'), }, berechnet:{ Themenname(){ gibt `theme${this.$store.state.themeId}` zurück } } } </Skript> Bei den Komponenten habe ich den Skriptteil extrahiert, da die meisten Komponenten logisch eigentlich gleich sind. Auch wenn es einige Unterschiede gibt, können wir diese direkt in den Komponenten von Thema 2 ändern, um die Auswirkungen auf Thema 1 zu reduzieren. //Aktion.js Standard exportieren{ Name:'Thema1', .... } <Vorlage> <div Klasse="Thema1"></div> </Vorlage> <Skript> Aktion importieren aus „../componentAction/action“ Aktion.name='Thema1' Standardaktion exportieren </Skript> <Stilbereich> </Stil> Der Vorteil dieser Implementierung besteht darin, dass durch den Stilbereich der Unterkomponente eine Stilisolierung erreicht werden kann und gleichzeitig die Funktionsdaten isoliert werden. Beispielsweise beeinflussen sich die Swiper in zwei Unterkomponenten nicht gegenseitig. Gleichzeitig wird durch Lazy Loading auch die Größe der Homepage beim Laden reduziert. Das spätere Hinzufügen zusätzlicher Themen wäre bloß Nachahmung. Die zweite Methode ist die Routing-IsolierungDie Routing-Isolierung ist eigentlich so einfach wie das Schreiben eines Routen-Arrays in Thema1 und eines Routen-Sets in Thema2. // router.js { Pfad: '/theme3', Name:'theme3Index', Komponente: () => import('../views/theme3/Index.vue'), Kinder:[ { Pfad: '/theme3/entry', Name: 'theme3Entry', Komponente: () => import('../views/theme3/entry.vue'), } ] } Diese Methode ist eigentlich die letzte Möglichkeit. Ich benutze sie vor allem, weil sich die Route geändert hat. Früher bin ich beispielsweise direkt zu a.vue gegangen, aber jetzt gibt es davor eine zusätzliche Einstiegsseite, sodass ich nur noch die Route ändern kann. Außerdem wird durch dieses Verfahren eine bessere Isolierung erreicht. ZusammenfassenDie beiden oben genannten Ideen spiegeln meine Gedanken zu unserem aktuellen Geschäft wider und dienen nur als Referenz. Tatsächlich haben diese beiden Methoden ein gemeinsames Problem: die Code-Redundanz. Jede Komponente enthält zwangsläufig einen Teil des Codes des vorherigen Designs. Obwohl der Großteil des Logikcodes extrahiert werden kann, können CSS und Vorlage nicht extrahiert werden. Wenn ein Design jedes Mal einen Dom und einen Funktionsblock hinzufügt und jedes Mal v-if verwendet wird, ist der Code in Zukunft schwieriger zu warten. Aus diesem Grund habe ich mich für die Unterteilung der Codes nach Themen entschieden. Zwei weitere Methoden basierend auf CSSMethode 1: Mehrere CSS-Sätze<!-- Mitte --> <Vorlage> Den Namen der übergeordneten Klasse dynamisch abrufen und eine übergeordnete Klasse mehrfach definieren <div :class="className"> <div Klasse="Schalter" v-on:click="ändern()"> {{ className == "box" ? "Mach das Licht an" : "Mach das Licht aus" }} </div> </div> </Vorlage> <Skript> Standard exportieren { Name: "Zentrum", Daten() { zurückkehren { Klassenname: "Box" }; }, Methoden: { // Klasse ändern ändern() { dieser.Klassenname === "Box" ? (dieser.Klassenname = "Boxen") : (dieser.Klassenname = "Box"); } }, }; </Skript> <style lang="scss"> Wenn die Klasse Box ist, verwenden Sie das CSS dieser Person @import "./style/witch.scss"; Wenn die Klasse aus Boxen besteht, verwenden Sie schwarzes CSS @import "./style/black.scss"; .schalten { Position: fest; oben: 4px; rechts: 10px; Z-Index: 50; Breite: 60px; Höhe: 60px; Hintergrund: #fff; Zeilenhöhe: 60px; Randradius: 20 %; } </Stil> Die Stile der einzelnen CSS-Dateien sind ungefähr gleich, außer dass das äußerste übergeordnete Element unterschiedlich ist, nämlich .box und .boxs Methode 2: Variablen in SCSS dynamisch wechselnIch habe es in zwei Hauptdateien aufgeteilt.
// Designwechsel $bgColor:var(--backgroundColor,rgb(255,255,255)); $fontColor:var(--fontColor,rgb(0,0,0)); $bgmColor:var(--backgroundMColor,rgb(238,238,238)); $tableColor:var(--tableColor,rgb(218,218,218)); $borderColor:var(--borderColor,rgb(238,238,238)); $tablesColor:var(--tablesColor,rgb(255,255,255)); $inputColor:var(--inputColor,rgb(255,255,255)) Ich habe eine globale Konfiguration für die Datei _variable.scss in vue.config.js erstellt, sie aber nicht in die Komponente eingeführt. css: { loaderOptions: { // Diese Datei ist die Datei zum Wechseln des Designs sass: { prependData: `@import "./src/styles/_variable.scss";`, }, }, }, publicStyle.js Diese Methode kann die durch var definierten Variablen ändern // Themenwechsel const cut = (cutcheack) => { document.getElementsByTagName("body")[0].style.setProperty("--backgroundColor", cutcheack ? "#121212" : "#fff"); document.getElementsByTagName("body")[0].style.setProperty("--fonntColor", cutcheack ? "#cecece" : "#333"); document.getElementsByTagName("body")[0].style.setProperty("--backgroundMColor", cutcheack ? "#333" : "#eee"); document.getElementsByTagName("body")[0].style.setProperty("--tableColor", cutcheack ? "#000" : "#d8d8d8"); document.getElementsByTagName("body")[0].style.setProperty("--tablesColor", cutcheack ? "#222" : "#fff"); document.getElementsByTagName("body")[0].style.setProperty("--inputColor", cutcheack ? "#666" : "#fff"); document.getElementsByTagName("body")[0].style.setProperty("--borderColor", cutcheack ? "#666" : "#fff"); }; Standardschnitt exportieren; Wird in Komponenten verwendet <!-- Startseite --> <Vorlage> <div Klasse='Startseite'> <el-switch v-model="cutcheack" active-color="#333" inactive-color="#13ce66" active-text="Design" @change="switchs"></el-switch> </div> </Vorlage> <Skript> Schnitt aus "../../utils/publicStyle.js" importieren; Standard exportieren { Name: "Home", Daten() { zurückkehren { cutcheack: false, //Theme wechseln}; }, Methoden: { //Linke Navigation ein- oder ausblenden //Design wechseln switches() { Schnitt(dies.cutcheack); }, }, }; </Skript> <style lang='scss' scope> .heim { Höhe: 100%; Breite: 100 %; Hintergrund:$bgColor; .el-container { Höhe: 100%; Farbe:$Schriftfarbe; } } </Stil> Oben finden Sie ausführliche Informationen zum Teilen verschiedener Ideen zur Implementierung des Themenwechsels in Vue. Weitere Informationen zum Vue-Themenwechsel finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Detailliertes Tutorial zur Installation von MySQL unter Linux
>>: Eingebettetes Transplantations-Docker-Fehlerproblem (Zusammenfassung)
Inhaltsverzeichnis 1. Ereignisverarbeitungsmodell...
Xiaobai zeichnet die Installation von vmtools auf...
Der Schlüssel ist, dass der lokale Server keine S...
Inhaltsverzeichnis Replikationsarchitektur mit ei...
1. Hintergrund In tatsächlichen Projekten stoßen ...
Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...
Im späteren Stadium der Ausnutzung von SQL-Inject...
Beim Entwickeln mobiler Apps stoßen Sie häufig au...
1. MySQL installieren # Laden Sie MySQL im Docker...
Der Befehl „Docker Exec“ kann Befehle in einem la...
Schritte: 1. MySQL-Datenbank installieren 1. Lade...
Definition von Generika // Anforderung 1: Generik...
Inhaltsverzeichnis DOMContentLoaded und laden Was...
Inhaltsverzeichnis 1. Kommunikation zwischen Vate...
In diesem Artikelbeispiel wird der spezifische JS...