VorwortIch habe kürzlich an einigen Front-End-Projekten gearbeitet und muss einige Tabellen auf Seiten anzeigen. Es gibt viele Möglichkeiten, eine Tabelle zu paginieren. Aus einer Makroperspektive kann man sie in physisches und logisches Paging unterteilen. Da beim logischen Paging (d. h. Front-End-Paging) alle Daten zwischengespeichert und dann auf Seiten angezeigt werden, wirkt sich dies bei großen Datenmengen auf die Browsergeschwindigkeit aus. Nach reiflicher Überlegung habe ich daher Back-End-Paging verwendet. Das Merkmal des Back-End-Paging besteht darin, dass es die Daten der aktuellen Seite anfordert und jedes Mal, wenn sich die Seitenzahl oder die Datenmenge pro Seite ändert, eine Anforderung erneut sendet. Die wichtigsten hier zum Einsatz kommenden Technologien sind:
Die Backend-Datenbank verwendet MySQL, es können jedoch auch andere Datenbanken verwendet werden, da das PageHelper-Plugin mit verschiedenen Datenbanken kompatibel ist. Das Wesentliche von PageHelper besteht darin, einen Interceptor einzufügen, um vor der Ausführung der MyBatis SQL-Anweisung eine Paging-Operation durchzuführen, wodurch im Wesentlichen zwei Grenzparameter hinzugefügt werden. Informationen zur Konfiguration und Verwendung von PageHelper finden Sie im Artikel „Spring + Mybatis verwendet das PageHelper-Plug-In für die Paginierung“, der hier nicht wiederholt wird. Das Front-End verwendet das kürzlich populäre VueJS-Framework 2.0, ein Framework mit MVVM-Architektur, das AngularJS ähnelt, aber leichter ist. Das verwendete UI-Framework ist das vom Ele.me-Team eingeführte ElementUI-Framework. Dies ist ein auf VueJS basierendes Framework, das sich perfekt mit unserem Front-End-Framework kombinieren lässt und viele Komponenten kapselt, was die Entwicklung sehr komfortabel macht. TextUnten sehen Sie einen Screenshot des Programms. Sie können es deutlicher sehen, indem Sie mit der rechten Maustaste klicken und das Bild in einem neuen Tab öffnen. Werfen wir einen Blick auf den Frontend-Code. Zunächst die importierten Dateien: <link rel="stylesheet" href="/core/element-ui/lib/theme-default/index.css" rel="externes nofollow" > <script src="./js/jquery-3.1.1.min.js"></script> <script src="./js/json2.js"></script> <script src="./js/vue.min.js"></script> <script src="./js/vue-resource.js"></script> <script src="./element-ui/lib/index.js"></script> Die erste und letzte Zeile sind die Importpakete von ElementUI. Sie können die Quelldateien von der offiziellen Website von ElementUI herunterladen oder sie direkt über CDN importieren: <!-- Stil importieren --> <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-default/index.css" rel="externes nofollow" > <!-- Komponentenbibliothek importieren--> <script src="https://unpkg.com/element-ui/lib/index.js"></script> Die vorletzte Zeile „vue-resource“ ist ein Ajax-Plugin für vuejs, das Anfragen initiieren und Antworten über XMLHttpRequest oder JSONP verarbeiten kann. Einfach ausgedrückt kann es zum Senden von Ajax-Anfragen verwendet werden. Als nächstes kommt der Stil <Stil> .el-Auswahl .el-Eingabe { Breite: 110px; } .el-Tabelle .info-Zeile { Hintergrund: #c9e5f5; } #Spitze { Hintergrund: #20A0FF; Polsterung: 5px; Überlauf: versteckt } </Stil> HTML-Text <div id="test"> <div id="oben"> <span style="float:right;"> <el-button type="text" @click="add" style="color:white">Hinzufügen</el-button> <el-button type="text" @click="deletenames" style="color:white">Stapellöschung</el-button> </span> </div> <br/> <div Stil="Rand oben:15px"> <el-input placeholder="Bitte Inhalt eingeben" v-model="Kriterien" style="padding-bottom:10px;"> <el-select v-model="Auswählen" slot="prepend" placeholder="Bitte auswählen"> <el-option label="id" value="1"></el-option> <el-option label="name" value="2"></el-option> </el-Auswahl> <el-button slot="anhängen" icon="suchen" v-on:click="suchen"></el-button> </el-Eingabe> <el-Tabelle ref="Testtabelle" :data="Tabellendaten" Stil="Breite:100%" Grenze :default-sort = "{prop: 'id', order: 'aufsteigend'}" @selection-change="Auswahländerungsgriff" @row-click="Handleklick" :Zeilenklassenname = "Tabellenzeilenklassenname" > <el-table-column Typ="Auswahl" > </el-Tabellenspalte> <el-table-column prop="Ich würde" Bezeichnung="Ich würde" sortierbar Überlauf-Tooltip anzeigen> </el-Tabellenspalte> <el-table-column Eigenschaft = "Name" Bezeichnung="Name" sortierbar> </el-Tabellenspalte> <el-table-column label="Vorgang"> <Vorlage Umfang="Umfang"> <el-Schaltfläche Größe="klein" Typ="primär" @click="handleEdit(scope.$index, scope.row)">Bearbeiten</el-button> <el-Schaltfläche Größe="klein" Typ="Gefahr" @click="handleDelete(scope.$index, scope.row)">Löschen</el-button> </Vorlage> </el-Tabellenspalte> </el-Tabelle> <div ausrichten="zentrieren"> <el-pagination @size-change="Größenänderungsgriff" @current-change="AktuelleÄnderung handhaben" :current-page="aktuelleSeite" :Seitengrößen="[10, 20, 30, 40]" :page-size="Seitengröße" Layout = "Gesamt, Größen, Zurück, Pager, Weiter, Jumper" :total="Gesamtzahl"> </el-pagination> </div> </div> </div> <Fußzeile ausrichten="center"> <p>© Vue.js 2.0 + ElementUI-Paging-Demo</p> </Fußzeile> Der nächste Schritt besteht darin, eine Vue-Instanz zu erstellen. Hier kommt ES5 zum Einsatz. <Skript> var vue = neuer Vue({ el:"#test", Daten: { //Tabelle aktuelle Seitendaten tableData: [], //Mehrfachauswahl-Array multipleSelection: [], //Angeforderte URL URL: „newstu/querystudentbypage“, //Suchkriterien: '', //Dropdown-Menüoptionen auswählen: '', //Standardseitengröße: 10, //Standardmäßig hervorgehobene Zeilendaten-ID Highlight-ID: -1, //Aktuelle Seitennummer currentPage: 1, //Abfrageseitennummer beginnt: 1, //Standard-Gesamtdaten totalCount: 1000, }, Methoden: { //Daten vom Server lesen loadData: function(criteria, pageNum, pageSize){ dies.$http.get(diese.url,{parameter:kriterien, seitennummer:seitennummer, seitengröße:seitengröße}).dann(funktion(res){ diese.tableData = res.data.pagestudentdata; Dies ist die Gesamtanzahl der Datensätze, die in der Tabelle angezeigt werden. },Funktion(){ console.log('fehlgeschlagen'); }); }, //Antwort mit Mehrfachauswahl handleSelectionChange: function(val) { diese.multipleSelection = Wert; }, //Klicken Sie auf die Zeilenantwort handleclick: function(row, event, column){ diese.highlightId = zeilen-id; }, //Handle bearbeitenEdit: function(index, row) { this.$prompt('Bitte geben Sie einen neuen Namen ein', 'prompt', { confirmButtonText: 'Bestätigen', cancelButtonText: 'Abbrechen', }).then(({ Wert }) => { wenn(Wert==''||Wert==null) zurückkehren; dies.$http.post('newstu/update',{"id":row.id,"name":value},{emulateJSON: true}).dann(function(res){ dies.loadData(dieses.Kriterium, diese.aktuelleSeite, diese.Seitengröße); },Funktion(){ console.log('fehlgeschlagen'); }); }).catch(() => { }); }, // einzelne Zeile löschen handleDelete: function(index, row) { var-Array = []; Array.push(Zeile.ID); dies.$http.post('newstu/delete',{"array":array},{emulateJSON: true}).dann(function(res){ dies.loadData(dieses.Kriterium, diese.aktuelleSeite, diese.Seitengröße); },Funktion(){ console.log('fehlgeschlagen'); }); }, //Suchesearch: function(){ dies.loadData(dieses.Kriterium, diese.aktuelleSeite, diese.Seitengröße); }, //hinzufügenhinzufügen: Funktion(){ this.$prompt('Bitte geben Sie einen Namen ein', 'prompt', { confirmButtonText: 'Bestätigen', cancelButtonText: 'Abbrechen', }).then(({ Wert }) => { wenn(Wert==''||Wert==null) zurückkehren; dies.$http.post('newstu/add',{"name":Wert},{emulateJSON: true}).dann(Funktion(res){ dies.loadData(dieses.Kriterium, diese.aktuelleSeite, diese.Seitengröße); },Funktion(){ console.log('fehlgeschlagen'); }); }).catch(() => { }); }, //Mehrere Löschungen deletenames: function(){ wenn(this.multipleSelection.length==0) zurückkehren; var-Array = []; dies.multipleSelection.forEach((item) => { : Array.push(Artikel.ID); }) dies.$http.post('newstu/delete',{"array":array},{emulateJSON: true}).dann(function(res){ dies.loadData(dieses.Kriterium, diese.aktuelleSeite, diese.Seitengröße); },Funktion(){ console.log('fehlgeschlagen'); }); }, //Ändere die Klasse der aktuell angeklickten Zeile und markiere die aktuelle Zeile tableRowClassName: function(row, index){ wenn(row.id == diese.highlightId) { gib „Infozeile“ zurück; } }, //Ändern der pro Seite angezeigten Datenmenge handleSizeChange: function(val) { diese.Seitengröße = Wert; dies.loadData(dieses.Kriterium, diese.aktuelleSeite, diese.Seitengröße); }, //Seitenzahl ändern handleCurrentChange: function(val) { diese.aktuelleSeite = Wert; dies.loadData(dieses.Kriterium, diese.aktuelleSeite, diese.Seitengröße); }, }, }); //Daten laden vue.loadData(vue.criteria, vue.currentPage, vue.pagesize); </Skript> Lassen Sie uns nun den obigen Code einfach erklären. tableData ist ein Array von Daten, die auf der aktuellen Seite der Tabelle angezeigt werden. Wenn die Webseite geladen wird, wird zuerst die Methode loadData ausgeführt. criteria ist die aktuelle Suchbedingung, die standardmäßig leer ist. Der zweite Parameter ist die aktuelle Seitenzahl, die standardmäßig die erste Seite ist. Der dritte Parameter ist der Offset, also die Zahl, die Sie abfragen möchten, also die Datenmenge, die auf jeder Seite enthalten ist. Immer wenn sich die Seitenzahl oder die Datenmenge pro Seite ändert, wird diese Methode mit den neuen Werten dieser Parameter als Parameter erneut aufgerufen. Werfen wir einen Blick auf den Controller-Code: @AntwortBody @RequestMapping(Wert = "/querystudentbypage", Methode = RequestMethod.GET) öffentliche Map<String, Object> querystudentbypage(@RequestParam(value="parameter")String-Parameter, @RequestParam(value="Seitennummer")int Seitennummer, @RequestParam(value="Seitengröße")int Seitengröße) { Seite<Student> Seite = iNewStudentService.selectStudents(Parameter, Seitennummer, Seitengröße); Map<String, Objekt> map = neue HashMap<String, Objekt>(); map.put("pagestudentdata", Seite); map.put("Zahl", page.getTotal()); Rückfahrkarte; } ce-Implementierungscode: öffentliche Seite<Student> selectStudents(String-Parameter, int Seitennummer, int Seitengröße) { Seite<Student> Seite = PageHelper.startPage(Seitennummer, Seitengröße); newstudentMapper.selectStudents(Parameter); Rückseite; } Mybatis-Code <select id="selectStudents" resultMap="NewStudentResultMap"> Wählen Sie ID, Name des Studenten aus, wobei ID=#{parameter} oder Name wie CONCAT('%',#{parameter},'%') </Auswählen> Hinweis: Der Einfachheit halber wird hier im Code die Benutzereingabe unscharf verarbeitet. Das ID-Feld in der Datentabelle entspricht der Benutzereingabe bzw. das Namensfeld enthält die Benutzereingabe und kann abgefragt werden. Aus der Serviceimplementierungsklasse und dem Mabatis-Code oben können wir ersehen, dass wir der SQL-Anweisung kein Limit manuell hinzugefügt haben, sondern vor newstudentMapper.selectStudents(Parameter); die Seite page = PageHelper.startPage(pageNum, pageSize) hinzugefügt haben. Dieser Code ist ein Aufruf von PageHelper. Sie müssen sich keine Gedanken darüber machen, wie PageHelper implementiert wird (tatsächlich über Interceptor). Nur dieser Code wird benötigt, um physische Seitenumbrüche vorzunehmen. Es bearbeitet eine darauf folgende SQL-Abfrage und gibt nach der Seitenumbruchänderung den aktuellen Seitencode zurück. Zu den weiteren Grundfunktionen des Programms gehören Hinzufügen, Ändern, Löschen, Stapellöschen usw. Die Front-End-Codes wurden erläutert, und das Back-End ruft lediglich die Datenbank auf, sodass der Back-End-Code hier nicht eingefügt wird. Notiz: SchlussworteAls Frontend-Steuerung ist vuejs in den letzten Jahren immer beliebter geworden. Die Community ist sehr aktiv und es gibt eine große Anzahl von Open-Source-Projektbibliotheken, die dazu passen. Eine detaillierte Liste finden Sie in der Zusammenfassung der Vue Open Source-Projektbibliothek. Wenn vuejs in Open-Source-Bibliotheken integriert wird, wird die Effizienz der Front-End-Entwicklung erheblich verbessert, insbesondere für Back-End-Ingenieure wie mich, die mit dem Front-End nicht sehr vertraut sind. Sie können die Front-End-Entwicklung auch durchführen, indem sie sich auf die Tutorials und Beispiele auf der offiziellen Website beziehen. Wenn Sie ES6 verwenden, ist die Modularisierung einfacher. ElementUI ist auch eine sehr gute Komponentenbibliothek, die über eine gute Kapselung und Schnittstellen für häufig verwendete Komponenten wie Tabellen, Formulare, Zeit- und Datumsauswahl usw. verfügt. PageHelper ist ein von einem Chinesen geschriebenes Mybatis-Paging-Plugin. Es bietet eine sehr gute Leistung, unterstützt alle gängigen Datenbanken und ist sehr einfach zu verwenden. Was Sie für die Front-End-Entwicklung lernen müssen, ist nicht viel weniger als für die Back-End-Entwicklung und erfordert mehr Erfahrung. Hier werde ich den Lernprozess der Front-End-Entwicklung aufzeichnen. Dies ist das Ende dieses Artikels über die von Vue2.0+ElementUI+PageHelper implementierte Tabellenseitenfunktion. Weitere relevante Inhalte zur Tabellenseitenfunktion von Vue2.0 ElementUI PageHelper finden Sie in den vorherigen Artikeln von 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:
|
Inhaltsverzeichnis Umgebungsvorbereitung Umgebung...
Vorwort Kürzlich wurden Daten online falsch bearb...
Nginx (Engine x) ist ein leistungsstarker HTTP- u...
In diesem Artikel wird der spezifische Code des V...
Problem: Der Überlauf der Auto-Increment-ID in ei...
Problembeschreibung: Der Benutzer hat die Anforde...
1. Die proxy_pass -Direktive des Moduls 1.ngx_str...
Umweltvorbereitung: VMware+CentOS, jdk 1. Überprü...
Inhaltsverzeichnis Vue CLI erstellt ein Vue-Proje...
Docker-Installation Installieren von Abhängigkeit...
Ich habe kürzlich in einem Projekt nginx und im B...
Ich habe heute eine Aufgabe von der Firma erhalte...
Ursprünglich sollte dieses siebte Kapitel eine aus...
Gestalten Sie die oben gezeigte Webseite: <!DOC...
Tabelle erstellen Tabelle erstellen Tabellenname ...