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

So stellen Sie mit Navicat Premium eine Remoteverbindung zur MySQL-Datenbank her

Derjenige, der eine neue Verbindung herstellt, en...

Fallstudie zu JavaScript-Style-Objekten und CurrentStyle-Objekten

1. Stilobjekt Das Stilobjekt stellt eine einzelne...

Erste Schritte Tutorial für Anfänger ⑨: So erstellen Sie eine Portal-Website

Darüber hinaus wird eine mit einem Blog-Programm e...

6 Vererbungsmethoden von JS Advanced ES6

Inhaltsverzeichnis 1. Vererbung der Prototypkette...

Lösung für FEHLER 1366 bei der Eingabe von Chinesisch in MySQL

Beim Eingeben von Chinesisch in MySQL tritt der f...

Wir treiben IE6 alleine in den Untergang

Tatsächlich fragen wir uns jeden Tag, wann IE6 wi...

Native JS-Kapselung vue Tab-Umschalteffekt

In diesem Artikelbeispiel wird der spezifische Co...

Detaillierte Erklärung der Docker-Nutzung unter CentOS8

1. Installation von Docker unter CentOS8 curl htt...

So binden Sie einen Docker-Container an eine externe IP und einen externen Port

Docker ermöglicht die Bereitstellung von Netzwerk...