Werkzeug:Installieren Sie Vue.js devtools im Chrome-Browser für einfaches Debuggen Anmeldeszenario:Der aktuelle Anmeldestatus des Benutzers wird manchmal in der Seitennavigation oder an anderen Stellen angezeigt. Der Status kann in folgende Kategorien unterteilt werden: nicht angemeldet, Anmeldung (wird geladen), erfolgreich angemeldet und Anzeige des Benutzernamens. Manche Seiten können von Benutzern ohne Anmeldung durchsucht werden, bei manchen Seiten ist jedoch eine Anmeldung erforderlich, bevor sie durchsucht werden können. üben: Szenario 1: Denken und ÜbenErstellen eines Datenspeichers mit Vuex //Erstellen Sie ein neues Store-Verzeichnis unter dem src-Verzeichnis und erstellen Sie index.js wie folgt //Erstellen Sie ein Data Warehouse, importieren Sie Vuex von „vuex“; importiere vue von „vue“; importiere loginUser aus „loginUser.js“ Vue.Verwenden(Vuex) const store = neuer Vuex.Store({ Module: { //Module können verschiedene Zustände in einem eigenen Objekt unterbringen loginUser //Ob Sie sich gerade anmelden}, strict: true, //Erlaube nur Zustandsänderungen durch Mutationen }); Legen Sie den Anmeldestatus „Laden“ und den aktuell angemeldeten Benutzer fest. //Erstellen Sie ein loginUser.js und erstellen Sie dessen Status/Mutationen/Aktionen //Der Status, der beibehalten werden muss state: { loading: false, //Anmeldestatus Benutzer: null, //Derzeit angemeldeter Benutzer}, //Berechnete Eigenschaftsgetter: { Status(Zustand) { wenn (Zustand.Laden) { Rückgabewert 'Laden' } sonst wenn (Status.Benutzer) { returniere 'login' } anders { returniere 'unLogin' } } }, //Laden und Benutzerstatusmutationen ändern: { //Laden einstellen setLoading(Zustand, Nachricht) { Zustand.Laden = Nachricht }, //Benutzer festlegen setUser(state, msg) { Status.Benutzer = Nachricht } }, //Übermitteln Sie den geänderten Status in Aktionen actions: { //Die Login-Methode ctx entspricht store asynchrone Anmeldung(ctx, msg) { //Setze den Login-Status auf true ctx.commit("setLoading", wahr) const Ergebnis = warte auf xxxapi.login(msg.loginId, msg.loginPassword) wenn (Ergebnis) { //Anmeldung erfolgreich ctx.commit('setUser', result) //Nach erfolgreichem Login wird der Login-Status auf false gesetzt ctx.commit('setLoading', falsch) } //Gibt zurück, ob die Anmeldung erfolgreich war. Ergebnis zurückgeben }, //Beurteilen Sie, ob Sie sich angemeldet haben async isLogin(ctx) { //Anmeldung ctx.commit('setLoading', true) //Rufen Sie die Schnittstelle auf, um zu sehen, ob sie angemeldet ist. const result = await xxxapi.isLogin(); ctx.commit('setUser', Ergebnis); ctx.commit('setLoading', false) }, //Abmelden async logout(ctx) { ctx.commit('setLoading', falsch) warte auf xxxapi.logout(); ctx.commit('setUser', null); ctx.commit('setLoading', falsch) } }, Seitennutzung: Beim Anmelden gibt es eine Anmeldeschaltfläche, und wir können den Status der Schaltfläche im Vuex-Lager abrufen <button :disabled="loading">{{ wird geladen ? 'wird geladen...' : 'Anmelden' }} </button> berechnet: { //Kapseln Sie das Laden in die berechnete Datei, damit Sie this.$store.state.loginUser nicht bei jedem Aufruf schreiben müssen. // loading() { // gib dies zurück.$store.state.loginUser.loading; // } // Optimierung // Hilfsfunktion // importiere {mapState} von "vuex" ...mapState({ wird geladen: (Status) => Status.loginUser.loading }) } Auslösen der Aktion beim Absenden durch Klicken auf die Schaltfläche asynchroner handleSubmit() { const Ergebnis = warte hierauf.$store.dispatch("loginUser/login", { Login-ID: diese.Login-ID, Anmeldekennwort: dieses.Anmeldekennwort }); wenn (Ergebnis) { // Anmeldung erfolgreich Routensprung const path = this.$route.query.url || '/' this.$router.push(Pfad) } }, Umschalten des Login-Status in der Seitennavigation [Laden/Anmelden/Abmelden] <!-- Anmeldestatus der Seite anzeigen--> <span v-if="status === 'loading'">Anmeldung wird durchgeführt, bitte warten...</span> <template v-else-if="status === 'anmelden'"> <span>Derzeit angemeldeter Benutzer {{user.name}}</span> <span @click="handleLogout">Abmelden</span> </Vorlage> <router-link to="/login" v-else> Anmelden</router-link> berechnet: { ...mapGetters("loginUser", ["status"]), ...mapState("loginUser", ["Benutzer"]), } Status beim Abmelden ändern asynchroner handleLogout(){ warte darauf.$store.dispatch("loginUser/logout") //Zur Anmeldeseite springen this.$route.push(/xxx) }, Der Anmeldestatus muss bei jeder Aktualisierung der Seite überprüft werden. Dies muss in main.js ermittelt werden, wenn vue erstellt wird. store.dispatch('loginUser/isLogin') Szenario 2: Denken und ÜbenBeachten Sie die Berechtigungseinstellungen im Hintergrundprojekt Gesamtkonzept: Überprüfen Sie nach dem Aktualisieren der Seite zunächst den Anmeldestatus im Vuex-Warehouse. –> Der Navigation Guard (router.beforeEach) erkennt anhand der in Meta festgelegten Parameter, ob diese Seite angemeldet ist. Zum Anzeigen müssen Sie sich anmelden --> Seitendarstellung. Allgemeine Logik: 1. Stellen Sie beim Aufrufen der Seite fest, ob zum Anzeigen dieser Seite eine Anmeldung erforderlich ist 2. Ermitteln Sie den Anmeldestatus. Es gibt die folgenden drei Zustände:
üben: Legen Sie Metadaten im Router fest. Wenn die Authentifizierung wahr ist, müssen Sie sich anmelden, um darauf zugreifen zu können. //Home aus "./xx/xx.vue" in routes.js importieren Exportstandard[ { Pfad: „/home“, Komponente:Home, Meta: { auth: true, //Seiten, für deren Zugriff Berechtigungen erforderlich sind} } ] Setzen Sie den Routenschutz in index.js router.beforeEach((to, from, next) => { wenn (to.meta.auth) { // Für den Zugriff ist eine Anmeldeberechtigung erforderlich const result = store.getters["loginUser/status"] if (Ergebnis === 'wird geladen') { // Ladestatus, ich weiß nicht, ob Sie angemeldet sind // Springen Sie zu einer Seite, auf der Sie sich anmelden, und überwachen Sie, ob die Anmeldung auf der Seite erfolgreich war, sonst bleibt sie für immer hier // Und wenn die Route springt, müssen Sie aufzeichnen, woher Sie vorher gekommen sind, sonst wissen Sie nicht, zu welcher Seite Sie als nächstes springen sollen ({ Pfad: '/loading', //Gehe zur Seite [Anmelden] query: { URL: zu.vollständigerPfad } }) } sonst wenn (Ergebnis === 'login') { // Anmeldung erfolgreichnext(); } anders { // Nicht angemeldet this.$message.info('Sie müssen sich anmelden'); nächste({ Pfad: '/login', //Zur Seite [Anmelden] gehen query: { URL: zu.vollständigerPfad } }) } } anders { //Seiten, auf die ohne Login-Berechtigung zugegriffen werden kann next() } }) Überwachen Sie den aktuellen Status auf der Anmeldeseite erstellt() { this.unWatch = this.$watch(() => this.$store.getters["loginUser/status"], (status) => { console.log('aktueller Status', Status); wenn (Status !== 'wird geladen'){ dies.$router.push(diese.$route.query.url || '/home').catch(() => {} } }, { sofort: wahr }) }, zerstört() { //Überwachung abbrechen this.unWatch() } ZusammenfassenDies ist das Ende dieses Artikels über die Verwaltung des Anmeldestatus in Vuex-Projekten. Weitere relevante Inhalte zur Verwaltung des Anmeldestatus von Vuex 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:
|
<<: Vor- und Nachteile von MySQL-Indizes und Richtlinien zum Erstellen von Indizes
>>: Detaillierte Erläuterung der Verwendung des DockerHub-Image-Repository
Inhaltsverzeichnis 1. Betrieb von js Integer 2. S...
Es gibt viele Datenbankverwaltungstools für MySQL...
Inhaltsverzeichnis 1. Einführung in das Docker-Ma...
Inhaltsverzeichnis 1. Beginnen wir mit dem Fazit ...
Die Attribute des <TD>-Tags werden verwende...
In diesem Artikelbeispiel wird der spezifische Co...
Tabellenfelder hinzufügen alter table table1 add ...
Hyperlink, auch „Link“ genannt. Man kann sagen, d...
Vor einiger Zeit habe ich einen Blogbeitrag mit d...
Inhaltsverzeichnis 1. Szenario 2. Grundfunktionen...
Was tun, wenn Sie Ihr Linux/Mac MySQL-Passwort ve...
Vorwort Dieser Artikel stellt hauptsächlich den r...
Code zum Ausblenden von Text, Ausblenden eines bes...
for-Schleife Die For-Schleife durchläuft die Elem...
1. Erstellen Sie eine Planungsaufgabe Anweisung c...