einführen In Projekten, die Vue-Router verwenden, ist die Instanziierung von VueRouter dessen Konfigurationsoption „Routes“. Diese Option gibt die Beziehung zwischen Routing- und Ansichtskomponenten oder die Beziehung zwischen Routing und anderem Routing an. Router-Konfigurationsoptionen sind die wichtigste Konfiguration. Objektattribute in RoutenSchnittstelle RouteConfig = { Pfad: Zeichenfolge, Komponente?: Komponente, Name?: Zeichenfolge, // benannte Routen *Komponenten?: { [Name: Zeichenfolge]: Komponente }, // benannte Ansichtskomponenten https://router.vuejs.org/zh/guide/essentials/named-views.html#%E5%B5%8C%E5%A5%97%E5%91%BD%E5%90%8D%E8%A7%86%E5%9B%BE umleiten?: Zeichenfolge | Standort | Funktion, Requisiten?: Boolesch | Objekt | Funktion, Alias?: Zeichenfolge | Array<Zeichenfolge>, children?: Array<RouteConfig>, // Verschachtelte Routen beforeEnter?: (to: Route, from: Route, next: Function) => void, *Meta?: beliebig, // 2.6.0+ *caseSensitive?: boolean, // Ist die Übereinstimmungsregel groß- und kleinschreibungsempfindlich? (Standardwert: false) *pathToRegexpOptions?: Object // Reguläre Ausdrucksoptionen kompilieren} Pfad: Zeichenfolge Geben Sie den Pfad der aktuellen Route an. Wenn die Browser-URL mit dem Pfad übereinstimmt, rendert router-view das aktuelle Routenobjekt, um die Ansichtskomponente(n) anzugeben. const Routen = [ { Weg: '/', Komponente: Startseite }, { Pfad: „/Benutzer“, Komponente: Benutzer } ] const router = neuer VueRouter({ Routen }) Beachten Sie, dass der Router von Vue dynamische Pfade in der Form „/:Eigenschaftsname“ als Teil der aktuellen Pfadzeichenfolge unterstützt. Diese Zeichenfolgenroute wird als dynamische Route verwendet, um die Antwortzeichenfolgeninformationen mit der tatsächlichen URL abzugleichen. const Routen = [ { Weg: '/', Komponente: Startseite }, { Pfad:'/user/:id/:local', // dynamischer Pfad:id :local Komponente: Benutzer } ] const router = neuer VueRouter({ Routen, }) //Routensprung <div id="app"> <Router-Ansicht /> // Die folgenden Links entsprechen /user/:id/:local <router-link to="/user/007/lk">Benutzer 007</router-link> <router-link to="/user/111/js">Benutzer 111</router-link> <router-link to="/user/10086/yk">Benutzer 10086</router-link> <router-link to="/user/241247/la">Benutzer 241247</router-link> </div> /* Wenn wir zur obigen Route springen, kann der Benutzer der entsprechenden Routenansichtskomponente die mit dem dynamischen Pfad übereinstimmenden Informationen über this.$route.params abrufen. Beispiel: url /user/007/lk this.$route.params -> {id:'007',local:'lk'} url /Benutzer/10086/yk this.$route.params -> {id:'10086',local:'yk'} */ Beachten Sie, dass this.$route das Informationsobjekt der Route ist, auf der sich die aktuelle Vue-Anwendung befindet. // http://localhost:8080/#/user/10086/cc?wd=iPhone&aa=test { Name: nicht definiert, // Aktueller Routenname *fullPath: "/user/10086/cc" // Vollständiger Pfad der aktuellen URL *hash: "" // Hash der aktuellen Route *übereinstimmend: [{…}] *Meta: {} params: {id: "10086", local: "cc"} // Dynamischer Pfad entspricht dem Schlüssel-Wert-Paar-Objekt *path: "/user/10086/cc" // Der Pfad, der mit der aktuellen URL übereinstimmt query: { // Die Abfragezeichenfolge der URL? Das Objekt wurde aus den folgenden Parametern analysiert wd: "iPhone", aa: "Prüfung" } } Komponente: Komponente | () => importiere(Komponente) Die Routenkomponente wird gerendert, wenn die aktuelle Browser-URL mit dem Routenpfad übereinstimmt Vue von „vue“ importieren Importiere HotMusicList aus '../views/HotMusicList' const Routen = [ { Pfad: '/hot', Komponente: HotMusicList }, { // Dynamisches Pfadmatching erhält verschiedene IDs für jeden Song durch: id Pfad: '/music/:id', // Durch verzögertes Laden von Routen können in Form von Funktionen Komponenten im Projekt, die am Anfang nicht geladen werden dürfen, in das Projekt geladen werden. // Erst wenn der Browser zur aktuellen Route springt, wird die Routenkomponente in das Projekt geladen. // Der Vorteil hierbei besteht darin, dass unnötiges Laden vermieden und die Ladegeschwindigkeit der Anwendung sowie die Bandbreite der Ausführung reduziert werden. Komponente: () => import('../views/MusicPlay') } ] Hinweis: Wenn bei der Projektentwicklung die Routing-Komponenten nicht zu Beginn der Anwendung geladen werden müssen, verwenden Sie bitte Lazy Loading. Name: Zeichenfolge Geben Sie der Route einen Namen, um sie zu einer benannten Route zu machen. Die Routennavigation kann anhand des Namens umgeleitet werden. (Wenn die Route die Standortnavigation verwendet, können nur benannte Routen Pramas-Parameter direkt akzeptieren.) const Routen = [ { Pfad: '/user', Name: 'Benutzer', Komponente: () => import('../views/User.vue') } ] Umleitung: Zeichenfolge | Standort | Funktion Route umleiten. Wenn die aktuelle Anwendung auf diese Route zugreift und zu ihr navigiert, wird diese Route automatisch (in Form eines Ersatzes) auf die durch die Umleitung angegebene neue Route umgeleitet. const Routen = [ { Pfad: '/contact', Komponente: ContactView }, { Pfad: '/user/:id', Name: 'Benutzer', Komponente: () => import('../views/User.vue') }, { Pfad: '/alterPfad1', Umleitung: '/Kontakt' }, { Pfad: '/alterPfad2', Umleitung: { Name: 'Benutzer', Parameter: { Name: 'Xiao Ming', Alter: 19 } } }, /* redirect unterstützt die Form einer Funktion, die einen Parameter empfängt, nämlich das beim Zugriff auf oldpath generierte Standortobjekt. Die Form der Umleitungsfunktion muss den Pfad oder Standort der Umleitungsroute zurückgeben. */ { Pfad: '/alterPfad2', Umleitung: (alter Pfad) => '/Kontakt' } { Pfad: '/alterPfad4', Umleitung: (alter Pfad) => { Name: 'Benutzer', Parameter: { Name: 'Xiao Ming', Alter: 19 } } } ] Requisiten: Boolesch | Objekt | Funktion Die dynamische Zuordnung von Routen kann im Allgemeinen nur über this.$route.params erfolgen, um den dynamisch zugeordneten Wert zu erhalten. Wenn die Props-Eigenschaft festgelegt ist, können die dynamisch übereinstimmenden Schlüssel-Wert-Paare direkt als Komponenten-Props an die Ansichtskomponente übergeben werden, wodurch die Kopplung der Komponenten erheblich reduziert wird. Boolescher Wert. Wenn props auf true gesetzt ist, werden alle Schlüssel-Wert-Paare in route.params als Komponenten-Props-Attribute gesetzt. const Routen = [ { Pfad: '/hot', Komponente: HotMusicList }, { // Dynamisches Pfadmatching erhält verschiedene IDs für jeden Song durch: id Pfad: '/music/:id', // Routing der Lazy-Loading-Komponente: () => import('../views/MusicPlay'), Requisiten: wahr } ] // Auf This.$route.id kann innerhalb der Komponente über die Props-ID zugegriffen werden <Vorlage> <div> Songwiedergabe <audio controls :src="musicUrl"/> </div> </Vorlage> <Skript> Standard exportieren { props: ['id'], // Das mit dem dynamischen Pfad der Route übereinstimmende Schlüssel-Wert-Paar wird automatisch an die gleichnamigen Props der aktuellen Komponente übergeben Daten() { zurückkehren { Musik-URL: '' } }, erstellt() { holen(`/song/url?id=${this.id}`) .then((res) => res.json()) .then(({ Daten }) => { //In der tatsächlichen Entwicklung müssen wir feststellen, ob die Datenanforderung erfolgreich ist. console.log(data[0]); // Ordne die Songdaten den Daten zu diese.musicUrl = data[0]?.url }); }, }; </Skript> Die Objekt-Requisiten-Objektform besteht darin, den Objektschlüssel als Namen des Requisitenattributs der Rendering-Komponente zu verwenden, und der Wert ist der entsprechende Attributwert (diese Art des Schreibens des Werts ändert sich nicht, sodass die übergebenen Requisiten alle statische Attribute sind). { Pfad: '/home/:id', Name: "Home", Requisiten: { ein: 1, b: falsch }, Komponente: Startseite } Die Funktion props empfängt das aktuelle Routeninformationsobjekt als Parameter und gibt ein Objekt zurück. Der Schlüssel des Objekts ist der Name des props-Attributs der Rendering-Komponente und der Wert ist der entsprechende Attributwert. { Pfad: '/home/:id', Name: "Home", Requisiten: (Route) => ({ a: route.query.wd, // übergebe die Route query.wd an ein Props der Komponente Home b: route.params.id //Übergeben Sie die Route params.id an die b-Eigenschaften der Komponente Home. }), Komponente: Startseite } Alias: Zeichenfolge| Array[Zeichenfolge] Der Alias der Route. Sie können mehrere Pfade für eine Route festlegen. Beim Zugriff auf diese Aliaspfade wird auf dieselbe Routingkomponente zugegriffen const Routen = [ { Pfad: '/hot', Komponente: HotMusicList, Alias: ['/Liste','/Rang','Empfehlen'] } ] Kinder?: Array[Routenkonfiguration] Verschachteltes Routing: Sie können ein sekundäres Routing für die aktuelle Route festlegen [ { Pfad: '/home', Komponente: Home, Kinder: [ { Pfad: '/home/follow', Komponente: () => import('../views/home/Follow') }, { Pfad: 'empfehlen', //Relativer Pfad ohne / vor der Route entspricht "/home/recommed" Komponente: () => import('../views/home/Empfehlen') } ] } ] beforeEnter: (bis: Route, von: Route, weiter: Funktion) => void Der exklusive Schutz der Route. Wenn die Anwendung zur aktuellen Route navigieren möchte, kann dieser Schutz verwendet werden, um einige logische Operationen auszuführen und zu bestimmen, ob diese Navigation blockiert werden soll. Router-Instanzmethoden Konzept: Nach der Konfiguration des VueRouter-Instanzobjekts in Vue verfügt die Vue-Instanz über eine this.$router-Eigenschaft und this.$router ist das aktuelle VueRouter-Instanzobjekt. Es stellt alle programmgesteuerten Navigations-APIs bereit. *VueRouter-Instanzeigenschaften
VueRouter-Instanzmethoden router.push(Zeichenfolge | Standort) Programmgesteuertes Navigieren zu einer bestimmten Route <Vorlage> <div> <h3>Startseite</h3> <div Klasse="Tabulator"> <router-link to="/home/follow">Folgen</router-link>| <button @click="gotoRecommend">Empfehlen</button> </div> <Router-Ansicht /> </div> </Vorlage> <Skript> Standard exportieren { Methoden: { gotoRecommend() { // dies.$router.push("/home/recommend"); dies.$router.push({Pfad:"/home/recommend", Abfrage:{wd:1,offset:0}}) }, }, }; </Skript> router.replace(Zeichenfolge | Standort) Ersetzen Sie die aktuelle Route programmgesteuert durch eine neue Route. <Vorlage> <div> <h3>Startseite</h3> <div Klasse="Tabulator"> <router-link to="/home/follow">Folgen</router-link>| <button @click="gotoRecommend">Empfehlen</button> </div> <Router-Ansicht /> </div> </Vorlage> <Skript> Standard exportieren { Methoden: { gotoRecommend() { // dies.$router.replace("/home/recommend"); dies.$router.replace({Pfad:"/home/recommend", Abfrage:{wd:1,offset:0}}) }, }, }; </Skript> router.go(Int-Zahl) Bewegen Sie programmgesteuert eine Anzahl von Elementen aus dem aktuellen Routenverlaufsstapel vorwärts und rückwärts. this.$router.go(3) // Gehe 3 Einträge vorwärts vom aktuellen Routenverlaufsstapel this.$router.go(-1) // Gehe 1 Eintrag zurück vom aktuellen Routenverlaufsstapel this.$router.go(0) // Erzwinge eine Aktualisierung der Seite Beachten Sie, dass, wenn die Vorwärts-/Rückwärtszahl größer als die Länge des Instanzroutenverlaufsstapels ist, zum letzten Element vorgerückt oder zum ersten Element zurückgesprungen wird. Dies wird jedoch nicht empfohlen, da es zu Leistungsproblemen und Seiteneinfrieren führen kann. router.zurück() Gehen Sie programmgesteuert eine Route vom aktuellen Routenverlaufsstapel zurück this.$router.back() // entspricht this.$router.go(-1) router.vorwärts() Programmgesteuertes Vorwärtsbewegen um eine Route vom aktuellen Routenverlaufsstapel this.$router.forward() // entspricht this.$router.go(1) Routing für verzögertes LadenBeim Schreiben von Single-Page-Anwendungen mit vue.js ist das gepackte JavaScript-Paket sehr groß, was sich auf das Laden der Seite auswirkt. Wir können Lazy Loading von Routen verwenden, um dieses Problem zu optimieren. Wenn wir eine bestimmte Route verwenden, laden wir die entsprechende Komponente, was effizienter ist. Kein Lazy Loading Dabei werden die Komponenten zunächst vorgestellt und vorab geladen. Dann existiert es bereits, unabhängig davon, ob es verwendet wird oder nicht Vue von „vue“ importieren VueRouter von „vue-router“ importieren Home aus '../views/Home.vue' importieren Vue.use(VueRouter) const Routen = [ { Weg: '/', Name: "Home", Komponente: Startseite }, ] const router = neuer VueRouter({ Routen }) Standardrouter exportieren Lazy Loading verwenden Erst wenn die Route genutzt wird, wird die entsprechende Komponente geladen Vue von „vue“ importieren VueRouter von „vue-router“ importieren Vue.use(VueRouter) const Routen = [ { Pfad: '/mock', Name: 'Mock', // Code-Aufteilung auf Routenebene // dies erzeugt einen separaten Block (about.[hash].js) für diese Route // das beim Besuch der Route verzögert geladen wird. Komponente: () => import(/* webpackChunkName: "about" */ '../views/Mock.vue') } ] const router = neuer VueRouter({ Routen }) Standardrouter exportieren Verlaufsmodus und Hash-Modus Standard-Hash-Modus des Vue-Routers – verwendet den Hash der URL, um eine vollständige URL zu simulieren, sodass die Seite nicht neu geladen wird, wenn sich die URL ändert. Verlaufsmodus history – verwendet die neuen Methoden pushState() und replaceState() in der HTML5-Verlaufsschnittstelle. (Erfordert spezielle Browserunterstützung) Diese beiden Methoden werden auf den Verlaufsstapel des Browsers angewendet. Basierend auf den vorhandenen Methoden „Zurück“, „Vorwärts“ und „Gehe“ (die Methoden können in den Instanzmethoden des Routers angezeigt werden) bieten sie die Funktion zum Ändern des Verlaufs. Das Problem ist nur, dass bei der Durchführung von Änderungen, obwohl die aktuelle URL geändert wird, der Browser nicht sofort eine Anfrage an das Backend sendet. Manuelle Einrichtung Wirkung Hash-ModusHash – das #-Symbol in der URL in der Adressleiste (dieser Hash ist keine kryptografische Hash-Operation). Beispielsweise lautet der Hashwert in dieser URL: http://localhost:8081/#/form #/form. Seine Besonderheit besteht darin, dass der Hash zwar in der URL erscheint, jedoch nicht in die HTTP-Anforderung aufgenommen wird und keine Auswirkungen auf das Backend hat. Daher wird die Seite beim Ändern des Hashs nicht neu geladen. RoutenwächterGlobaler Routing-Guard
Fall 1 In Projekten, die mit Vue-Router entwickelt wurden, wird beim Wechseln zwischen verschiedenen Routen im Allgemeinen die Komponente der ausgehenden Route deinstalliert und die Komponente der eingehenden Route gemountet.
Standard exportieren { Requisiten: ['id'], Daten() { zurückkehren { Musik-URL: '' } }, beforeRouteEnter (nach, von, weiter) { // Wird aufgerufen, bevor die entsprechende Route, die diese Komponente rendert, bestätigt wird. // Nein! fähig! Holen Sie sich die Komponenteninstanz `this` //Weil die Komponenteninstanz nicht erstellt wurde, bevor der Guard ausgeführt wurde console.log(undefined) }, beforeRouteUpdate (nach, von, weiter) { // Wird aufgerufen, wenn sich die aktuelle Route ändert, die Komponente aber wiederverwendet wird // Beispielsweise für einen Pfad /foo/:id mit dynamischen Parametern, wenn zwischen /foo/1 und /foo/2 gesprungen wird, // Da dieselbe Foo-Komponente gerendert wird, wird die Komponenteninstanz wiederverwendet. Und dieser Hook wird in diesem Fall aufgerufen. // Sie können auf die Komponenteninstanz `this` zugreifen }, beforeRouteLeave (nach, von, weiter) { // Wird aufgerufen, wenn von der entsprechenden Route dieser Komponente weg navigiert wird // Sie können auf die Komponenteninstanz `this` zugreifen } } Beachten Sie, dass die komponentenspezifischen Routing-Guard-Methoden alle drei Parameter enthalten, um vom nächsten
next() // Routing-Sprünge zulassen next(true) // Routing-Sprünge zulassen next(false) // Routing-Sprünge nicht zulassen next('/') / next({ path: '/' }) // Zu einer anderen Adresse springen. Die aktuelle Navigation wird unterbrochen und eine neue Navigation durchgeführt. Sie können ein beliebiges Standortobjekt an „next“ übergeben und es ermöglicht das Festlegen von Optionen wie „ersetzen: true“, „name: ‚home‘“ usw. // Beachten Sie, dass nur die nächste Methode von beforeRouteEnter eine Rückruffunktion akzeptieren kann. // Die Rückruffunktion erhält das aktuelle Routing-Komponenteninstanzobjekt als Parameter, über das wir die aktuelle Komponente bedienen können beforeRouteEnter(to, from, next) { console.log(bis, von) console.log('Die Komponente wird gerade eingegeben, aber die Komponenteninstanz existiert noch nicht', dies) weiter(vm => { holen(`/song/url?id=${vm.id}`) .then((res) => res.json()) .then(({ Daten }) => { //In der tatsächlichen Entwicklung müssen wir feststellen, ob die Datenanforderung erfolgreich ist. console.log(data[0]); // Ordne die Songdaten den Daten zu vm.musicUrl = data[0]?.url }); }) // Erlaube das Springen des Routings } Fall 2 In Projekten, die mit Vue-Router entwickelt wurden, wird beim Wechseln zwischen verschiedenen Routen im Allgemeinen die Komponente der ausgehenden Route deinstalliert und die Komponente der eingehenden Route gemountet. beforeEnter(to, from, next) wird ausgelöst, wenn der Router im Begriff ist, zur aktuellen Route zu navigieren const router = new VueRouter({ Routen: [ { Pfad: '/foo', Komponente: Foo, beforeEnter: (bis, von, weiter) => { // ... } } ] }) Beispielkonfiguration für die Route zur exklusiven Anmeldungsüberprüfung const Routen = [ { Weg: '/', Komponente: Startseite }, { Pfad: '/discover', Komponente: () => import('../views/Discover') }, { Pfad: '/mine', Komponente: () => import('../views/Mine'), //Route exklusiver Schutz beforeEnter(to, from, next) { // Weil dieser Guard keine DOM-Operationen durchführt und den eigenen Zustand der Komponente weder liest noch schreibt // Ein solcher Guard kann als routenexklusiver Guard verwendet werden // Der richtige Ansatz ist im Cookie-Speicher if (localStorage.getItem("user")) { nächste(); } anders { // Dies steht hier nicht, next empfängt eine Callback-Funktion und springt in die Callback-Funktion // Der folgende Text betritt die persönliche Seite und leitet von der persönlichen Seite zur Anmeldeseite weiter, was einige unnötige Fehler verursachen kann // weiter((vm) => { // vm.$router.replace('/landr') // }); next({name:'login',params:{to}}); //Diesen Sprung verhindern und direkt zur angegebenen Route navigieren} } }, { Pfad: '/landr', // Anmelden und Registrieren Komponente: () => import('../views/loginanregister/LoginAndRegister'), Kinder: [ { Name:'Anmelden', Pfad: 'Login', Komponente: () => import('../views/loginanregister/Login') }, { Pfad: 'Registrieren', Komponente: () => import('../views/loginanregister/Register') } ] } ] Fall 3 Globale Routenwächter: Wenn in der Anwendung mehrere Routen vorhanden sind, die dieselbe logische Routenwächterbeurteilung durchführen müssen, und die logische Operation nicht direkt den Komponenten-DOM oder den Status der Komponentenkomponente ausführen muss, können Sie globale Routenwächter verwenden (die häufigste Anwendung globaler Wächter ist die Anmeldeüberprüfung). Vue von „vue“ importieren Router von „vue-router“ importieren Home aus '../views/Home' importieren Vue.use(Router) const Routen = [ { Weg: '/', Name: "Home", Komponente: Startseite }, { Pfad: '/discover', Name: 'Entdecken', Komponente: () => import('../views/Discover') }, { Pfad: '/mine', Name: 'Meins', Komponente: () => import('../views/Mine'), }, { Pfad: '/landr', // Anmelden und Registrieren Komponente: () => import('../views/loginanregister/LoginAndRegister'), Kinder: [ { Name: 'Anmelden', Pfad: 'Login', Komponente: () => import('../views/loginanregister/Login') }, { Pfad: 'Registrieren', Komponente: () => import('../views/loginanregister/Register') } ] } ] const router = neuer Router({ Routen, linkExactActiveClass: 'aktiv' }) // Global Route Guard Alle Routensprünge rufen diesen Guard auf // Der Global Route Guard ist auch der am besten geeignete Ort für die Anmeldeüberprüfung in der Vue-Router-Anwendung router.beforeEach((to, from, next) => { if(to.name === "Meins" || to.name === "Entdecken") { // Weil dieser Guard keine DOM-Operationen durchführt und den eigenen Zustand der Komponente weder liest noch schreibt // Ein solcher Guard kann als routenexklusiver Guard verwendet werden // Der richtige Ansatz ist im Cookie-Speicher if (localStorage.getItem("user")) { nächste(); } anders { // Dies steht hier nicht, next empfängt eine Callback-Funktion und springt in die Callback-Funktion // Der folgende Text betritt die persönliche Seite und leitet von der persönlichen Seite zur Anmeldeseite weiter, was einige unnötige Fehler verursachen kann // weiter((vm) => { // vm.$router.replace('/landr') // }); next({ name: 'login', params: { to } }); //Diese Weiterleitung verhindern und direkt zur angegebenen Route navigieren} }anders { nächste() } }) Standardrouter exportieren router.beforeResolve(to,from,next) globaler Front Guard, nachdem beforeEach ausgelöst wurde Dies ist das Ende dieses Artikels über die detaillierte Konfiguration von Vue-Router-Routen. Weitere relevante Inhalte zur Konfiguration von Vue-Router-Routen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: So implementieren Sie die zentrierte Ausrichtung einer CSS-Maske im Vollbildmodus
>>: Detaillierte Erläuterung des MySQL Workbench-Nutzungs-Tutorials
Hallo zusammen, heute werde ich die Implementieru...
Inhaltsverzeichnis 1. Lösung auslösen 2. Partitio...
Vorwort Im Internet gibt es zahlreiche Informatio...
Was sind HTTP-Header HTTP ist eine Abkürzung für ...
Detailliertes Beispiel für das Datenbankbetriebso...
1. Absoluter Pfad Zunächst einmal bezieht sich de...
Optimieren von Abfragen Verwenden der Explain-Anw...
Gestern habe ich einen Blog über den kreisförmige...
Ich werde nächstes Semester MySQL lernen. Ich hab...
Im Vergleich zu anderen großen Datenbanken wie Or...
Inhaltsverzeichnis Vorwort Fügen Sie Sudo-Schreib...
<meta http-equiv="X-UA-kompatibel" c...
Bei Verwendung einer Oracle-Datenbank für Fuzzy-A...
Inhaltsverzeichnis 1. Einleitung 1.1 Grundsatz 1....
MySQL-Downloads für alle Plattformen sind unter M...