2. Detaillierte ErklärungDie Grundidee ist: Anmelden > nach Erfolg Menü basierend auf Benutzerinformationen abrufen > Routing-Informationen basierend auf Menü generieren 2.1. AsyncRoutes-Routing hinzufügen Fügen Sie im Vue-Router-Pfad exportiere const asyncRoutes = [ { Pfad: '*', Umleitung: '/404', versteckt: true } ] Der Unterschied zwischen constantRoutes und asyncRoutes constantRoutes: Routen, die keine dynamische Berechtigungsbestimmung erfordern, wie etwa Anmeldeseiten, 404-Seiten und andere allgemeine Seiten. asyncRoutes: erfordert dynamische Autoritätsbeurteilung und dynamisch hinzugefügte Seiten durch addRoutes 2.2. Erstellen Sie eine neue Datei permission.js Erstellen Sie eine neue Datei permission.js unter dem Vuex-Pfad importiere { asyncRoutes, constantRoutes } von '@/router' importiere { fetchUserMenuList } von '@/api/user' Layout aus '@/layout' importieren /** * Lazy Loading für statische Routen * @param-Ansichtsformat muss mit xxx/xxx ohne Schrägstrich beginnen * @returns */ export const loadView = (Ansicht) => { return (auflösen) => erfordern([`@/views/${view}.vue`], auflösen) } /** * Die vom Backend abgefragten Menüdaten in Routingformatdaten zusammenstellen* @param routes * @param data Menüdaten, die vom Backend zurückgegeben werden */ Exportfunktion generaMenu(Routen, Daten) { Daten.fürJeden(Element => { const Menü = { Pfad: item.url, Komponente: item.component === '#' ? Layout : loadView(item.component), hidden: item.status === 0, // versteckte Weiterleitung mit Status 0: item.redirect, Kinder: [], Name: Artikelcode, Meta: Element.Meta } wenn (Element.Kinder) { generaMenu(Menü.Kinder, Element.Kinder) } Routen.push(Menü) }) Hin- und Rückwege } konstanter Zustand = { Routen: [], Routes hinzufügen: [] } const Mutationen = { SET_ROUTES: (Status, Routen) => { state.addRoutes = Routen // Statische Routen und dynamische Routen verketten state.routes = constantRoutes.concat(routes) } } const Aktionen = { Routes generieren({ commit }, token) { gib ein neues Versprechen zurück (Auflösen => { // Holen Sie sich das Benutzermenü vom Backend über ein Token und fügen Sie es dem globalen Status hinzu fetchUserMenuList(token).then(res => { const menuData = Objekt.assign([], res.data) const tempAsyncRoutes = Object.assign([], asyncRoutes) const abgerufenRoutes = generaMenu(tempAsyncRoutes, menuData) commit('SET_ROUTES', aufgerufene Routen) auflösen(Zugriffsrouten) }).fangen(Fehler => { console.log(Fehler) }) }) } } Standard exportieren { Namespace: wahr, Zustand, Mutationen, Aktionen } 2.3. Registrieren Sie das Berechtigungsmodul in vuex Wenn Sie vue-element-admin verwenden, überspringen Sie diesen Schritt bitte, da dadurch alle Module automatisch unter Vue von „vue“ importieren Vuex von „vuex“ importieren Getter aus „./getters“ importieren Vue.Verwenden(Vuex) // https://webpack.js.org/guides/dependency-management/#requirecontext const moduleFiles = require.context('./modules', true, /\.js$/) // Sie müssen die App nicht aus „./modules/app“ importieren. // es werden automatisch alle Vuex-Module aus der Moduldatei angefordert const module = moduleFiles.keys().reduce((modules, modulePath) => { // setze './app.js' => 'App' const Modulname = Modulpfad.replace(/^\.\/(.*)\.\w+$/, '$1') Konstantwert = ModuleDateien(Modulpfad) Module[Modulname] = Wert.Standard Rückführmodule }, {}) const store = neuer Vuex.Store({ Module, Getter }) Standardspeicher exportieren 2.4. Routing-Status in Gettern hinzufügen Fügen Sie den Status „menuRoutes“ im Vuex-Pfad MenüsRouten: Status => Status.Berechtigung.Routen 2.5. Ändern Sie die Quelle der Menügenerierungsdaten Ändern Sie die Routendatenquelle im Pfad Routen() { // gib dies zurück.$router.options.routes gib dies zurück.$store.getters.menusRoutes }, An diesem Punkt ist die Logik vom Abrufen der Menüdaten vom Backend bis zur Seitenanzeige abgeschlossen. Jetzt können wir sie nach der Anmeldung aufrufen. 2.6. Menü nach dem Einloggen aufrufen Fügen Sie in der Anmeldemethode des Vuex-Pfads // Menü abrufen. Beim Aufrufen von Aktionen in anderen Dateien müssen Sie { root: true } hinzufügen. dispatch('Berechtigung/Generieren von Routen', Daten, { root: true }).then((Zugriffsrouten) => { router.addRoutes(Zugriffsrouten) }) 2.7. Lösen Sie das Problem der leeren Seite nach dem AktualisierenDer obige Inhalt kann bereits die Funktion zum Anzeigen des linken Menüs nach der Anmeldung realisieren, Sie werden jedoch feststellen, dass die Seite bei jedem Aktualisieren der Seite leer wird. Dies liegt daran, dass beim Aktualisieren der Seite die Vue-Instanz neu geladen und die Daten im Vuex-Speicher neu zugewiesen werden, wodurch die Routing-Informationen in Vuex gelöscht werden. Fügen Sie den Code zum Abrufen von Routen in const accessRoutes = warte auf store.dispatch('permission/generateRoutes', store.getters.token) router.addRoutes(Zugriffsrouten) weiter({ ...zu, ersetzen: true }) 3. ZusammenfassungBisher ist die dynamische Erfassung von Menüinhalten auf Basis von Benutzerinformationen abgeschlossen. Dies ist das Ende dieses Artikels über die Verwendung des Vue-Element-Admin-Frameworks zum dynamischen Abrufen von Menüs vom Backend. Weitere relevante Inhalte zum dynamischen Abrufen von Menüs durch Vue-Element-Admin 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 Erklärung der MySQL-Berechtigungen und -Indizes
>>: Beispiel für die Installation von Kong Gateway in Docker
Inhaltsverzeichnis Einführung in gespeicherte Pro...
Beim Erstellen von Formularen kommt es häufig vor...
Als ich mir selbst die Webentwicklung beibrachte,...
Beispielsweise Benutzer, die eine Bildschirmleseso...
Vorwort Unter LINUX werden periodische Aufgaben n...
Die Beziehung zwischen Tomcat-Protokollen Ein Bil...
Inhaltsverzeichnis Vorwort Start React-Lebenszykl...
Inhaltsverzeichnis Vorwort LED-Trigger Entdecken ...
<br />Ursprüngliche Adresse: http://andymao....
Installieren Sie zuerst die abhängigen Pakete, um...
Inhaltsverzeichnis brauchen Daten abrufen und übe...
Inhaltsverzeichnis Standardausführungsprozess Opt...
TABELLE> <TR> <TD> <TH> <...
<br />Im Allgemeinen ist die Dateiorganisati...
Mit der Anweisung „Truncate table“ werden alle Da...