Verwenden Sie das Vue-Element-Admin-Framework, um die Menüfunktion dynamisch vom Backend abzurufen

Verwenden Sie das Vue-Element-Admin-Framework, um die Menüfunktion dynamisch vom Backend abzurufen

2. Detaillierte Erklärung

Die 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 src\router\index.js das Array asyncRoutes hinzu, um die Routing-Informationen zu speichern, die dem vom Backend erhaltenen Menü entsprechen.

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 src\store\modules\permission.js . Dieser Vorgang ist der wichtigste Schritt, hauptsächlich um das Menü vom Backend abzufragen und Routen zu generieren.

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 src\store\modules in src\store\index.js registriert werden. Wenn Sie eine Vue-Element-Vorlage verwenden, können Sie sich an den Administrator wenden und die Datei index.js ändern oder sie manuell importieren.

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 src\store\getters.js

MenüsRouten: Status => Status.Berechtigung.Routen 

2.5. Ändern Sie die Quelle der Menügenerierungsdaten

Ändern Sie die Routendatenquelle im Pfad src\layout\components\Sidebar\index.vue Die ursprüngliche Datenquelle ist Routing und wird so geändert, dass sie von vuex abgerufen wird.

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 src\store\modules\user.js die Logik zum Generieren des Routings hinzu, indem Sie das Menü nach erfolgreicher Anmeldung per Token abrufen.

 // 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 Aktualisieren

​Der 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 src\permission.js hinzu.

const accessRoutes = warte auf store.dispatch('permission/generateRoutes', store.getters.token)
          router.addRoutes(Zugriffsrouten)
          weiter({ ...zu, ersetzen: true })

3. Zusammenfassung

​Bisher 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:
  • Beispiel für die dynamische Hinzufügung von Routing und Generierung von Menümethoden in Vue
  • Vue-Router-Beispielcode zum dynamischen Generieren von Navigationsmenüs basierend auf Backend-Berechtigungen
  • So generieren Sie dynamisch Untermenüs in der Vue-Seitenleiste
  • Wie erhält Vue Daten aus dem Hintergrund, um eine dynamische Menüliste zu generieren

<<:  Detaillierte Erklärung der MySQL-Berechtigungen und -Indizes

>>:  Beispiel für die Installation von Kong Gateway in Docker

Artikel empfehlen

CSS-Implementierungscode für die Textausrichtung

Beim Erstellen von Formularen kommt es häufig vor...

So implementieren Sie die Vervollständigung leerer Zellen in HTML-Tabellen

Als ich mir selbst die Webentwicklung beibrachte,...

Schreiben Sie Ihr HTML so, um Ihren Code kompatibler zu machen

Beispielsweise Benutzer, die eine Bildschirmleseso...

Lösung für die Inkonsistenz zwischen Crontab-Ausführungszeit und Systemzeit

Vorwort Unter LINUX werden periodische Aufgaben n...

Zusammenfassung der React-Grundlagen

Inhaltsverzeichnis Vorwort Start React-Lebenszykl...

Entdecken Sie, wie Ihnen eine LED den Einstieg in den Linux-Kernel erleichtert

Inhaltsverzeichnis Vorwort LED-Trigger Entdecken ...

Überlegungen zum Rasterdesign von Webseiten

<br />Ursprüngliche Adresse: http://andymao....

64-Bit-CentOs7-Quellcodeinstallation MySQL-5.6.35 Prozessfreigabe

Installieren Sie zuerst die abhängigen Pakete, um...

So erhalten Sie Formulardaten in Vue

Inhaltsverzeichnis brauchen Daten abrufen und übe...

Detaillierte Erklärung der MySQL-Gruppierung durch Optimierung

Inhaltsverzeichnis Standardausführungsprozess Opt...

Zusammenfassung der XHTML-Anwendung im Webdesign-Studium

<br />Im Allgemeinen ist die Dateiorganisati...

Verwendung der MySQL-Anweisung „truncate table“

Mit der Anweisung „Truncate table“ werden alle Da...