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

Lösen Sie das Problem der Docker-Protokollmontage

Der Schlüssel ist, dass der lokale Server keine S...

Gängige Master-Slave-Replikationsarchitekturen in MySQL 4

Inhaltsverzeichnis Replikationsarchitektur mit ei...

Abfrage der Daten des Tages vor dem aktuellen Zeitintervall in MySQL

1. Hintergrund In tatsächlichen Projekten stoßen ...

Auszeichnungssprache - Stylesheets drucken

Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...

Detaillierte Erklärung des Sticky Position-Attributs in CSS

Beim Entwickeln mobiler Apps stoßen Sie häufig au...

Docker exec führt mehrere Befehle aus

Der Befehl „Docker Exec“ kann Befehle in einem la...

Detaillierte Erklärung generischer Fälle in TypeScript

Definition von Generika // Anforderung 1: Generik...

Detaillierte Analyse des Blockierungsproblems von js und css

Inhaltsverzeichnis DOMContentLoaded und laden Was...

Wie implementiert Vue die Kommunikation zwischen Komponenten?

Inhaltsverzeichnis 1. Kommunikation zwischen Vate...

JS implementiert die Benutzerregistrierungsschnittstellenfunktion

In diesem Artikelbeispiel wird der spezifische JS...