Detaillierte Erklärung der globalen Variablenimplementierung von Uniapp

Detaillierte Erklärung der globalen Variablenimplementierung von Uniapp

Vorwort

In diesem Artikel werden einige Implementierungsmethoden für globale Variablen von Uniapp zusammengefasst. Die detaillierten Informationen stammen aus der Implementierung globaler Variablen in Uniapp auf der offiziellen uView-Website. Interessierte Studierende können auf die offizielle uView-Website gehen und nach vuex suchen, um sie anzuzeigen.

So implementieren Sie globale Variablen

Grundsätzlich gibt es in uniapp mehrere Möglichkeiten:

  • Lokaler Speicher
  • Konfigurationsdateien
  • In Vue.prototype einbinden
  • globalData
  • vuex

Im Folgenden finden Sie eine Einführung in die Implementierung dieser fünf Methoden.

Lokaler Speicher

Dauerhafte Speicherung, d.h. auch wenn die App geschlossen wird, bleiben die Daten erhalten

Dies ist eine permanente Speichermethode, ähnlich dem lokalen Speicher des Webs (Cookies, Tokens, SessionStorage, LocalStorage werden in einem anderen Artikel behandelt). Diese Methode wird verwendet, wenn wir die Informationen eines Benutzers dauerhaft speichern müssen. Es ist jedoch zu beachten, dass bei dieser Methode das häufige Abrufen und Ändern gespeicherter Daten vermieden werden muss, da dies die Leistung beeinträchtigt. Variablen innerhalb des Anwendungsdeklarationszyklus sollten diese Methode nicht verwenden.

Es gibt zwei Arten von Speicher: synchron und asynchron

Synchroner Speicher

  //Synchronisierter Speicher uni.setStorageSync("Schlüssel","Wert")
  //Synchronisierter Erwerb let value = uni.getStorageSync("key")  
  console.log("Ich werde warten, bis das oben genannte abgeschlossen ist, bevor ich es ausführe)

Asynchroner Speicher

  uni.setStorage({
   Schlüssel: "Schlüssel",
    Daten: „Wert“,
    Erfolg:Funktion(){
      //Speicherrückruf erfolgreich console.log("Ich bin der Rückruf des asynchronen Speichers, ich werde ausgeführt, nachdem val deklariert wurde")
    }
  })
  let val = 1 //Diese Zeile führt zuerst uni.getStorage({
   Schlüssel: "Schlüssel",
    Erfolg:Funktion(res){
      //Erfolgreichen Rückruf speichern console.log("Ich bin der asynchron erhaltene Rückruf, ich werde ausgeführt, nachdem val2 deklariert wurde")
    }
  })
  let val2 = 2 // Diese Zeile wird zuerst ausgeführt

Konfigurationsdateien

Dies ist eine Methode zur Verwendung des modularen Dateiexports. Schreiben Sie zuerst die Variable in die JS-Datei und exportieren Sie sie dann in der Form „Exportstandard“.

Im Allgemeinen sind die auf diese Weise implementierten globalen Variablen Variablen, die verwendet werden müssen, bevor die Anwendung vom Benutzer installiert wird und wenn der Benutzer sie deinstalliert, z. B. der Domänenname, der beim Backend angefordert wird. Diese Methode ist für andere Situationen nicht geeignet. Gleichzeitig hat diese Methode auch Nachteile, d. h. jede Verwendung erfordert die Einführung von Dateien

config.js

  //Beispielsweise haben wir in config.js einen Basisdomänennamen exportiert export default {
   baseUrl:"http://www.test.com"
  }

index.js

  //Führen Sie diese Datei durch Import ein import config von "../common/config.js"
  Standard exportieren {
    beim Laden(){
     console.log(config.baseUrl)//baseUrl:"http://www.test.com"
    }
  }

In Vue.prototype einbinden

Dies ist eine Möglichkeit, es mithilfe von Prototypen zu implementieren (Informationen zur JS-Prototypkette und Vererbung werden in einem anderen Artikel behandelt), aber diese Methode bietet eine besondere Leistung für das WeChat-Applet.

Hinweis: Im WeChat-Applet können Vorlagen die eingeführten globalen Variablen nicht direkt lesen und anzeigen.
Haupt-JS

  //Die Datei config.js bezieht sich hier auf die Datei, die bereits oben geschrieben wurde: import config from "./common/config.js"
  // Mounten Sie baseUrl in Vue, und dann können Sie über this.baseUrl in Seiten und Komponenten darauf zugreifen. Vue.prototype.baseUrl = config.baseUrl

Seite

<Vorlage>
 <!-- Der Wert ist im WeChat-Applet nicht definiert, auf anderen Terminals gültig-->
 <Ansicht>
 Der Wert ist: {{this.baseUrl}}
 </Ansicht>
</Vorlage>

<Skript>
 Standard exportieren {
 beim Laden() {
    console.log(diese.baseUrl)//"http://www.test.com"
 }
 }
</Skript>

globalData

Diese Methode ist einzigartig für WeChat-Miniprogramme. Miniprogramme können vuex nicht verwenden, daher wird globalData angezeigt. Uniapp ist eine weitere Implementierung von Miniprogrammen, daher wird auch globalData angezeigt.

Bei der Verwendung von globalData sind einige Dinge zu beachten:

  • globalData reagiert nicht. Änderungen an globalData in einer Datei werden nicht dynamisch in einer anderen Datei widergespiegelt.
  • Wenn Sie die „Antwort“ von globalData implementieren möchten, müssen Sie den Wert manuell im onShow-Lebenszyklus abrufen

Erklären Sie den zweiten Punkt: Warum müssen wir den Wert in onShow abrufen? Ist onLoad nicht möglich?

Denn wenn sowohl Seite A als auch Seite B globalData einführen und B den Wert von globalData innerhalb der Seite ändert und zu Seite A zurückkehrt, wird Seite A nicht zerstört und der Life-Hook onLoad wird nicht aufgerufen. Nur onShow wird ausgeführt. Wenn Sie versuchen, globalData in onLoad abzurufen, wird es nicht ausgeführt und Reaktionsfähigkeit kann nicht erreicht werden.

App.vue

  Standard exportieren{
   //GlobalData muss in App.vue definiert werden
   globalData:{
     Benutzername: „Bai Juyi“
    },
    //Beachten Sie hier, dass Sie getApp().globalData.Name nicht direkt verwenden können, wenn Sie globalData in App.vue verwenden möchten, da getApp() zu diesem Zeitpunkt noch nicht generiert wurde // 1. Nicht-V3-Modus, Sie können es über this.$scope.globalData erhalten // 2. V3-Modus, Sie können es über getApp({allowDefault: true}).globalData onLaunch(){ erhalten.
     Konsole.log(dies.$scope.globalData.Benutzername)
    }
  }

Nachdem wir globalData in App.vue definiert haben, können wir es auf der Seite verwenden
A.vue

<Vorlage>
 <Ansicht>
 <Ansicht>
  <!-- Beachten Sie, dass getApp().globalData.userName nicht direkt in der Vorlage verwendet werden kann -->
  Der Autor von <<The Charcoal Seller>> ist: {{author}}
 </Ansicht>
 <Ansicht>
  <u-button @click="modifyUserName">Benutzernamenwert ändern</u-button>
 </Ansicht>
 </Ansicht>
</Vorlage>

<Skript>
 Standard exportieren {
 Daten() {
  zurückkehren {
  Autor: ''
  }
 },
 beiAnzeigen() {
  // Jedes Mal, wenn A.vue auf dem Bildschirm erscheint, wird onShow ausgelöst und somit der Autorwert aktualisiert. this.author = getApp().globalData.userName;
 },
 Methoden: {
  Benutzername ändern() {
                //Der Wert von globalData wird zu diesem Zeitpunkt geändert getApp().globalData.userName = "Benutzername";
  // Nach dem Ändern von userName wird der Autor dieser Seite immer noch nicht automatisch aktualisiert, da globalData nicht reagiert. // Wir müssen den Autorwert dieser Seite immer noch manuell aktualisieren, was die Nachteile von globalData zeigt this.author = getApp().globalData.userName;
  }
 }
 }
</Skript>

So implementieren Sie Vuex

Es wird dringend empfohlen, vuex zu verwenden. Es gibt zwei Möglichkeiten, vuex in Uniapp zu verwenden, eine basiert auf der traditionellen vue-Methode und die andere ist die uView-Kapselungsmethode. Im Folgenden wird die Kapselung von vuexd auf der offiziellen uView-Website vorgestellt

Traditionelle Implementierung

Hier ist nur eine kurze Einführung in die traditionelle Verwendung von Vuex. Wenn Sie Vuex nicht kennen, können Sie auf der offiziellen Vue-Website die offizielle Dokumentation anzeigen.

Erstellen Sie eine Store-Datei im Stammverzeichnis von uni.app und erstellen Sie darin eine index.js-Datei mit folgendem Inhalt

//index.js
  Vue von „vue“ importieren
  Vuex von „vuex“ importieren
  Vue.Verwenden(Vuex)
  const store = neuer Vuex.Store({
   Zustand:{
     vuex_token:"123456"
    },
    //Methoden zum synchronen Ändern des Werts bei Statusmutationen:{
     //Payload ist ein Parameter, der übergeben wird, wenn der Benutzer Mutationen verwendet. Es kann ein einzelner Wert oder ein Objekt sein modifyToken(state,payload){
       Zustand.vuex_token = Nutzlast.token
      }
    }
  })
  Standardspeicher exportieren

Importieren in main.js

Store aus „@/store“ importieren;

//Den Store in die Vue-Objekterstellung einfügen const app = new Vue({
 speichern,
 ...App
})

Auf Seite verwenden

<Vorlage>
 <Ansicht>
 <Ansicht>
  Der Token-Wert beträgt {{vuex_token}}
 </Ansicht>
 <u-button @click="btnClick">vuex_token ändern</u-button>
 </Ansicht>
</Vorlage>

<Skript>
//Dies ist die von Vue bereitgestellte API, um die Verwendung des Stores zu vereinfachen. Weitere Informationen finden Sie in der offiziellen Vue-Dokumentation import {mapState, mapMutations} from 'vuex'; 
Standard exportieren {
 berechnet: { 
 ...mapState(['vuex_token']) 
 }, 
 Methoden: { 
 ...mapMutations(['modifiziertes Token']),
 btnClick() {
  // Der zweite Parameter kann hier eine normale Variable oder ein Objekt sein, das angepasst und gemäß den Mutationsanforderungen verarbeitet wird (ohne Verwendung von mapMutations).
  dies.$store.commit('modifyToken', {token: 'xxxyyyzzz'}
            //Verwenden von mapMutations this.modifyToken({token: 'xxxyyyzzz'})
 }
 } 
}
</Skript>

Vuex-Implementierung von uView (wichtigste Punkte)

Lassen Sie uns zunächst darüber sprechen, warum uView vuex kapselt. Dafür gibt es zwei Gründe:

  • uView ist der Ansicht, dass es notwendig ist, Status und Mutationen in vuex zu definieren und mapState zur Dekonstruktion an jeder Stelle einzuführen, an der vuex benötigt wird, und es dann erneut zu verwenden (der Vorgang ist umständlich).
  • Da Vuex Variablen im Speicher speichert, verschwinden die Vuex-Variablen beim Aktualisieren des Browsers. Im Allgemeinen ist es erforderlich, es mit anderen Speichermethoden wie LocalStorage zu verwenden.

Als Reaktion auf diese Probleme bietet uView offiziell eine Reihe von Methoden zum Einkapseln und Verwenden von vuex. Diese Methode kombiniert LocalStorage und vuex, sodass Benutzer keine mühsamen Aufrufe von vuex mehr durchführen und das Problem des Aktualisierungsverlusts berücksichtigen müssen. Im Folgenden werde ich den Code zeigen und seine Ideen und Prozesse erläutern.

  • Erstellen Sie zunächst eine Datei index.js im Stammverzeichnis und schreiben Sie den folgenden Inhalt. Ich werde am Anfang die allgemeine Idee darlegen und die spezifische Bedeutung später in den Kommentaren erläutern.

Idee: Die allgemeine Idee von index.js ist wie folgt

a. Um das Problem zu lösen, dass vuex Daten aktualisiert und verliert und diese nicht dauerhaft speichern kann, wird ein lifeData-Objekt erstellt. Dieses Objekt wird über eine Funktion in LocalStorage gespeichert, um den Effekt der dauerhaften Aufbewahrung zu erzielen. Zu diesem Zeitpunkt muss ich nur die Daten, die in vuex dauerhaft gespeichert werden müssen, in diesem Objekt in Form von Schlüssel und Wert speichern.

b. Um das Problem zu lösen, dass bei jeder Verwendung von vuex die Funktion in Mutationen verwendet werden muss, um die Variablen im entsprechenden Store zu bedienen, und die Methode $uStore gekapselt ist, um alle Variablen im Store zu bedienen. Natürlich wird nur ein einfacher Kopiervorgang ausgeführt. Für erweiterte Funktionen können Benutzer Funktionen zur Erweiterung in Mutationen kapseln.

c. Kapseln Sie ein saveStateKeys-Array ein. Die Daten in diesem Array werden beim Start der App abgerufen, sodass wir einige Daten einfügen können, die beim Start der App abgerufen werden müssen, z. B. die Informationen zum letzten Anmeldezeitpunkt des Benutzers in der Anwendung. Tatsächlich werden saveStateKeys und lifeData zusammen verwendet. Nur Variablen in saveStateKeys werden während der Speicherung in lifeData gespeichert, um eine dauerhafte Speicherung zu erreichen. Der Rest ist derselbe wie bei der normalen Vuex-Speichermethode. Wir können dies im folgenden Code sehen

// Vuex einführen, vue Vuex verwenden, dieser Schritt unterscheidet sich nicht von der allgemeinen Verwendung von vuex import Vue from 'vue'
Vuex von „vuex“ importieren
Vue.Verwenden(Vuex)

//Erstellen Sie eine Variable zum Speichern von Daten, die dauerhaft gespeichert werden müssen. let lifeData = {};

versuchen{
  // Versuchen Sie herauszufinden, ob die Variable lifeData lokal vorhanden ist. Beim ersten Start der App ist sie nicht vorhanden. lifeData = uni.getStorageSync('lifeData');
}fangen(e){
 
}

// Muss dauerhaft gespeichert und beim nächsten Start der App abgerufen werden, der Variablenname im Status let saveStateKeys = ['vuex_user', 'vuex_token'];

// Variablen im lokalen Speicher speichern (kein Verlust beim Aktualisieren/Neustarten (App wird nicht aktualisiert, App wird nur neu gestartet))
const saveLifeData = Funktion(Schlüssel, Wert){
 // Bestimmen Sie, ob der Variablenname im zu speichernden Array enthalten ist // Hiermit wird bestimmt, ob der Variablenname in saveStateKeys gespeichert ist. Speichern Sie ihn dann zur dauerhaften Speicherung in lifeData. Andernfalls entspricht dies der allgemeinen Vuex-Speichermethode if (saveStateKeys.indexOf(key) != -1) {
 // Holen Sie das lokal gespeicherte lifeData-Objekt und fügen Sie die Variable zum Objekt hinzu let tmp = uni.getStorageSync('lifeData');
 // Wenn Sie die App zum ersten Mal öffnen, ist keine Variable „lifeData“ vorhanden. Geben Sie daher ein leeres Objekt vom Typ {} ein: tmp = tmp ? tmp : {};
 tmp[Schlüssel] = Wert;
 // Nach der Ausführung dieses Schritts werden alle zu speichernden Variablen im lokalen lifeData-Objekt gemountet uni.setStorageSync('lifeData', tmp);
 }
}
const store = neuer Vuex.Store({
 // Die folgenden Werte sind nur Beispiele, bitte löschen Sie sie während des Nutzungszustands: {
 // Wenn es unter dem oben lokal abgerufenen lifeData-Objekt ein entsprechendes Attribut gibt, weisen Sie es der entsprechenden Variable im Status zu // Durch Hinzufügen des Präfixes vuex_ werden Variablennamenkonflikte vermieden und auf einen Blick klar ersichtlich // Die dauerhaft gespeicherten Daten werden von lifeData abgerufen, da lifeData bereits lokal gespeichert ist vuex_user: lifeData.vuex_user ? lifeData.vuex_user : {name: '明月'},
 vuex_token: lifeData.vuex_token ? lifeData.vuex_token : '',
 // Wenn vuex_version nicht im lokalen permanenten Speicher gespeichert werden muss, ist die Methode lifeData.vuex_version nicht erforderlich vuex_version: '1.0.1',
 },
 Mutationen:
 $uStore(Status, Nutzlast) {
            //Payload ist das Objekt, das übergeben wird, wenn this.$u.vuex später aufgerufen wird //wie this.$u.vuex("user.info.score","jack") payload = {name:"user.info.score",value:"jack"}
  // Bestimmen Sie, ob es sich um einen mehrstufigen Aufruf handelt und das Objekt im Status vorhanden ist, z. B. user.info.score = 1
  let nameArr = payload.name.split('.');//[Benutzer, Info, Punktzahl]
  lass saveKey = '';
  lass len = nameArr.length;
  wenn(nameArr.length >= 2) {
  let obj = Zustand[nameArr[0]];
  für(lass i = 1; i < len - 1; i++) {
   obj = obj[nameArr[i]]; // Zu diesem Zeitpunkt ist obj user.info, natürlich sind es immer noch leere Daten}
                //nameArr[len-1] ist der Score, obj[nameArr[len - 1]] ist gleichbedeutend mit user.info.score
  obj[nameArr[Länge - 1]] = Nutzlast.Wert;
  speichernSchlüssel = nameArr[0];
  } anders {
  // Einstufige Variable, falls „state“ eine normale Variable ist state[payload.name] = payload.value;
  Schlüssel speichern = Nutzlast.Name;
  }
  // Variablen lokal speichern, siehe oberste Funktionsdefinition saveLifeData(saveKey, state[saveKey])
 }
 }
})
Standardspeicher exportieren

Erstellen Sie eine mixin.js-Datei im selben Verzeichnis

Ideen:
a. Um Variablen auf dieser Weise verwenden zu können. Auf jeder Seite müssen wir mapState global über Vue mixin mischen.
b. Um die Methoden in den Mutationen in vuex auf jeder Seite einfach aufrufen zu können, benötigen wir eine Methode, die uns beim Aufrufen von uStore hilft, anstatt jedes Mal ein Commit auszuführen. Daher mischt uView auch eine andere Methode ein: $u.vuex

ps: minxi (mixin) ist eine von Vue bereitgestellte API zur Implementierung globaler Funktionen. Es gibt viele Möglichkeiten zum Einmischen. Hier wird globales Mixin verwendet. Wenn Sie nicht viel über Mixin wissen, können Sie auf der offiziellen Vue-Website relevante Dokumente anzeigen.

//mixin.js
importiere { mapState } von 'vuex'
Store aus "@/store" importieren

// Versuchen Sie, alle Statusvariablen des Vuex des Benutzers in store/index.js im Stammverzeichnis in globale Variablen zu laden. let $uStoreKey = [];
versuchen{
 $uStoreKey = store.state ? Objekt.keys(store.state) : [];
}fangen(e){
 
}

modul.exporte = {
 erstellt() {
 //Hängen Sie die Vuex-Methode an this.$u //Verwendungsmethode: Wenn Sie die Variable user.name im Vuex-Status in „epic“ ändern möchten => this.$u.vuex('user.name', 'epic')
 // Wenn Sie die Versionsvariable des Vuex-Status auf 1.0.1 ändern möchten => this.$u.vuex('version', '1.0.1')
 dies.$u.vuex = (Name, Wert) => {
  dies.$store.commit('$uStore', {
  Name,Wert //Erinnerst du dich an die von $uStore übergebene Nutzlast? haha 
  })
 }
 },
 berechnet: {
 // Dekonstruiere alle Variablen im Status von Vuex in den globalen Mixin … mapState($uStoreKey)
 }
}

Starten Sie das globale Mischen und fügen Sie die Datei mixin.js zum Mischen in main.js ein

//main.js
vuexStore = require("@/store/$u.mixin.js");
Vue.mixin(vuexStore);

Platzieren Sie den Store in der Vue-Instanz

//main.js
Store aus „@/store“ importieren;

//Den Store in die Vue-Objekterstellung einfügen const app = new Vue({
 speichern,
 ...App
})

Das Obige ist die offizielle Kapselung von vuex durch uView. Es ist sehr praktisch, dieses gekapselte vuex bei der App-Entwicklung zu verwenden. Gleichzeitig können Sie bei Bedarf auch Ihre eigenen Methoden in @/stote/index.js erweitern.

Abschluss

Oben sind verschiedene Möglichkeiten zur Implementierung globaler Uniapp-Variablen aufgeführt. Welche verwendet werden soll, muss entsprechend der tatsächlichen Situation bei der tatsächlichen Entwicklung ausgewählt werden. Ich persönlich bin der Meinung, dass die Kapselung von Vuex durch uView für mich, der neu im Frontend ist, einen sehr hohen Referenzwert hat, daher habe ich sie speziell zum Teilen ausgewählt.

Dies ist das Ende dieses Artikels mit der detaillierten Erklärung der Implementierungsmethode für globale Variablen von Uniapp. Weitere relevante Inhalte zu globalen Variablen von Uniapp finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der dynamischen Änderung des Elementknotenstils in Uniapp
  • Detaillierte Erklärung des Unterschieds zwischen Uniapp und Vue
  • Detaillierte Erklärung der schmerzlosen Token-Aktualisierungsmethode von Uniapp
  • Detaillierte Erklärung der Stile in uni-app

<<:  So verwenden Sie die Lotteriekomponente des WeChat Mini-Programms

>>:  Beispielcode zur Implementierung von Anti-Shake in Vue

Artikel empfehlen

Hinweise zur Zeitverwaltung des Linux-Kernel-Gerätetreibers

/****************** * Zeitverwaltung des Linux-Ke...

URL-Rewrite-Modul 2.1 URL-Rewrite-Modul – Regeln schreiben

Inhaltsverzeichnis Voraussetzungen Einrichten ein...

Gutes Website-Copywriting und gute Benutzererfahrung

Das Betrachten einer Website ist eigentlich wie di...

Docker stellt Mysql, .Net6, Sqlserver und andere Container bereit

Inhaltsverzeichnis Installieren Sie Docker unter ...

Zusammenfassung des Wissens zum Vue V-Modell

​v-model ist eine Vue-Direktive, die eine bidirek...

So verwenden Sie Docker Compose zum Erstellen eines FastDFS-Dateiservers

Im vorherigen Artikel wurde ein ausführliches Bei...

Vollständiger Schrittbericht zur Vue-Kapselung allgemeiner Tabellenkomponenten

Inhaltsverzeichnis Vorwort Warum müssen wir die T...

Eine detaillierte Diskussion über MySQL-Deadlocks und -Logs

Vor kurzem sind mehrere Datenanomalien in MySQL o...

DOCTYPE-Element ausführliche Erklärung vollständige Version

1. Übersicht In diesem Artikel wird das DOCTYPE-E...