Vue implementiert mehrere Ideen zum Themenwechsel

Vue implementiert mehrere Ideen zum Themenwechsel

Themen dynamisch ändern

Als 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 Komponenten

Wenn 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-Isolierung

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

Zusammenfassen

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

Methode 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 wechseln

Ich habe es in zwei Hauptdateien aufgeteilt.

  • _variable.scss Variablenverwaltungsdatei
  • var() ist eine in CSS3 vorgeschlagene Methode zum Deklarieren von Stilvariablen
  • var (Attributname, Attributwert) Beachten Sie, dass Attributwerte keine Zeichenfolgen sein können
// 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
document.getElementsByTagName("body")[0].style.setProperty("Eigenschaftsname", "ersetzter Eigenschaftswert f");

// 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:
  • Verschiedene Methoden zur Implementierung des Themenwechsels in VUE-Projekten
  • Vue + Scss wechseln dynamisch die Designfarben, um Skinning-Beispielcode zu erreichen
  • Implementierungsideen des Online-Theme-Editors für die Vue-Komponentenbibliothek
  • Farbschema für dynamisches Umschalten des Vue-Online-Designs
  • Beispielcode für Vue+Element zur Entwicklung von Shopping-Mall-Themen
  • Vue+WebPack: Themenänderungslösungen – Vor- und Nachteile-Analyse
  • So bestimmen Sie die Seitendesignfarbe basierend auf der Website-Weiterleitung in Vue
  • Vues elementUI implementiert benutzerdefinierte Designmethoden

<<:  Detailliertes Tutorial zur Installation von MySQL unter Linux

>>:  Eingebettetes Transplantations-Docker-Fehlerproblem (Zusammenfassung)

Artikel empfehlen

Praktisches Beispiel einer virtuellen Vue-Liste

Inhaltsverzeichnis Vorwort Design erreichen Zusam...

Detaillierte Erläuterung der gleichzeitigen Parameteranpassung von MySQL

Inhaltsverzeichnis Abfrage-Cache-Optimierung Über...

Detailliertes Tutorial zur Installation von MySQL auf CentOS 6.9

1. Bestätigen Sie, ob MySQL installiert wurde. Si...

Detaillierte Erklärung des Unterschieds zwischen Vue-Lebenszyklus

Lebenszyklusklassifizierung Jede Komponente von V...

js Drag & Drop-Tabelle zur Realisierung der Inhaltsberechnung

In diesem Artikelbeispiel wird der spezifische Co...

Schreiben von Methoden, die in nativem JS verboten sein sollten

Inhaltsverzeichnis Funktionen auf Blockebene Ände...

Detaillierte Schritte zum Erweitern der LVM-Festplatte unter Linux

1. Fügen Sie eine Festplatte hinzu 2. Überprüfen ...

Detaillierte Konfiguration des mysql8.x-Docker-Remotezugriffs

Inhaltsverzeichnis Umweltbedingungen Aufgetretene...

So erhalten Sie USB-Scannerdaten mit js

In diesem Artikel wird der spezifische Prozess zu...

Spezifische Verwendung von pthread_create in Linux zum Erstellen von Threads

pthread_create-Funktion Funktionseinführung pthre...

Detaillierte Erklärung der Dreieckszeichnung und clevere Anwendungsbeispiele in CSS

führen Einige gängige Dreiecke auf Webseiten könn...