Verwenden Sie v-model, um das Paging-Informationsobjekt zu binden. Das Paging-Informationsobjekt enthält 3 Kernattributparameter. Das Paging-Ereignis ist direkt an die Methode zum Abfragen von Daten gebunden, wodurch die Bindungsereignismethoden handleSizeChange und handleCurrentChange der übergeordneten Komponente eliminiert werden. 1. EinleitungEs gibt im Internet bereits viele ähnliche Artikel über die Entwicklung benutzerdefinierter Paging-Komponenten durch Kapselung von El-Paginierungskomponenten. Nachdem ich sie jedoch gelesen hatte, war ich immer noch unzufrieden und beschloss, selbst einen zu erstellen. 2. Hintergrund2.1. Konventionelle Paging-VerarbeitungsmethodeDie allgemeine Vorgehensweise bei der Verwendung der Komponente „el-pagination“ ist wie folgt: Vorlagenteil: <el-pagination @size-change="Größenänderungshandle" @current-change="handleCurrentChange" :current-page="Seiteninfo.Seitennummer" :Seitengrößen="[5, 10, 15, 20]" :Seitengröße="Seiteninfo.Seitengröße" layout="gesamt, Größen, zurück, Pager, weiter, Jumper" :gesamt="pageInfo.total" Hintergrund> </el-pagination> Skriptteil: Standard exportieren { Daten() { zurückkehren { formData : { //Abfrageinformationen queryInfo:{ Benutzertyp: 0, deleteFlag: 2, // zeigt alle Typen an pagenum: 1, Seitengröße: 10 }, // Das Benutzertyp-Auswahlfeld wählt derzeit den angezeigten Label-Wert userTypeLabel: „alle Typen“ aus, // Das Benutzerstatus-Auswahlfeld zeigt derzeit den ausgewählten Labelwert userStatusLabel: „alle Typen“ an. }, // Paging-Informationen pageInfo:{ Seitennummer: 1, Seitengröße: 10, gesamt : 0 } } }, Methoden: { // Benutzerinformationsliste abfragen queryUsers(){ lass _this = dies; //console.log(diese.Seiteninfo); diese.formData.queryInfo.pagenum = diese.pageInfo.pagenum; this.formData.queryInfo.pagesize = this.pageInfo.pagesize; diese.instance.queryUsers( dies.$baseUrl,diese.formData.queryInfo ).dann(res => { //Konsole.log(res.data); wenn (res.data.code == dieser.global.SucessRequstCode){ //Wenn die Abfrage erfolgreich ist_this.pageInfo.total = res.data.data.length; _this.userInfoList = res.data.data; }anders{ Alarm (res.data.message); } }).fangen(Fehler => { alert('Abfrage fehlgeschlagen!'); konsole.log(Fehler); }); }, // Anzahl der Elemente pro Seite ändern handleSizeChange(newSize) { this.pageInfo.pagesize = neue Größe; diese.queryUsers(); }, // Die aktuelle Seitenzahl ändert sich handleCurrentChange(newPage) { this.pageInfo.pagenum = neueSeite; diese.queryUsers(); } } 2.2 ProblemanalyseJede Paging-Abfrage erfordert eine Reihe ähnlicher Methoden, die teilweise einfach und repetitiv sind, sich aber auch leicht unterscheiden, d. h. die Methode zum Abfragen der Daten ist unterschiedlich. Für Programmierer mit Zwangsstörungen ist einfacher und sich wiederholender Code zweifellos sehr unangenehm. Daher muss es in Komponenten zerlegt werden. Analyse der Paging-Komponenten von el-pagination:
Das Entwicklungsziel der benutzerdefinierten Paging-Komponente besteht darin, die Bindungsereignismethoden handleSizeChange und handleCurrentChange der übergeordneten Komponente zu eliminieren. Idee: Verwenden Sie v-model, um das Paging-Informationsobjekt zu binden. Das Paging-Informationsobjekt enthält drei Kernattributparameter, nämlich die oben erwähnte pageInfo. Dann ist das Paging-Ereignis direkt an die Methode der Datenabfrage gebunden. 3. Umsetzung des Plans3.1. Benutzerdefinierte Paging-KomponentenSchreiben Sie einen benutzerdefinierten Paginierungskomponentencode. Die Datei heißt /src/Pagination.vue. Der Code lautet wie folgt: <template lang="html"> <div Klasse="pagination"> <el-pagination @size-change="Größenänderungsgriff" @current-change="AktuelleÄnderung handhaben" :current-page.sync="Seiteninfo.Seitennummer" :Seitengröße="Seiteninfo.Seitengröße" :page-sizes="Seitengrößen" :total="Seiteninfo.total" Layout = "Gesamt, Größen, Zurück, Pager, Weiter, Jumper" Hintergrund > </el-pagination> </div> </Vorlage> <Skript> Standard exportieren { Name: "Paginierung", Modell : { Eigenschaft: „Seiteninfo“, Ereignis: „Ändern“ }, Requisiten: { //Wählen Sie die Anzahl der Elemente pro Seite pageSizes: { Typ: Array, Standard() { Rückkehr [5, 10, 15, 20]; } }, // Datenobjekt pageInfo an v-model gebunden: { Typ: Objekt, erforderlich:true } }, Daten(){ zurückkehren { } }, Methoden: { handleSizeChange(neueGröße) { var neuerWert={ Seitengröße: neue Größe, Seitennummer: neueGröße <= this.total? 1: this.pageInfo['Seitennummer'] }; dies.$emit('ändern',Objekt.zuordnen(diese.pageInfo,neuerWert)); dies.$emit('Paginierung'); }, handleCurrentChange(neueSeite) { dies.$emit('ändern',Objekt.zuordnen(this.pageInfo,{pagenum : newPage})); dies.$emit('Paginierung'); } } } </Skript> <style lang="css" scoped> .pagination { Polsterung: 10px 0; Textausrichtung: zentriert; } </Stil> Eine benutzerdefinierte Paging-Komponente namens Paginierung, die das V-Modell zur bidirektionalen Datenkommunikation verwendet. Wenn sich die Seitenzahl oder die Anzahl der Elemente pro Seite ändert, wird das Paginierungsereignis „@pagination“ ausgelöst, das eine Bindung mit der Methode der übergeordneten Komponente herstellt. Der Feldaufbau der pageInfo ist wie folgt festgelegt: Seiteninfo:{ Seitennummer: 1, //Nummer Seitengröße: 10, //Zahl gesamt: 0 //Anzahl } Die übergeordnete Komponente muss ein Datenobjekt mit derselben Struktur bereitstellen, um das PageInfo-Objekt innerhalb der Komponente zu binden. 3.2. Registrieren Sie die Paging-KomponenteRegistrieren Sie dann diese Paging-Komponente und fügen Sie den folgenden Code in main.js ein: Paginierung aus „@/components/Pagination.vue“ importieren //Paging-Plugin registrieren Vue.component('pagination', pagination) 3.3. Aufrufmethode der übergeordneten KomponenteÄndern Sie den Code im vorherigen Kapitel 2 mithilfe der Paginierungskomponente. Vorlagenteil: <!-- Seitenbereich --> <pagination v-model="pageInfo" @pagination="queryUsers"></pagination> Skriptteil: Standard exportieren { Daten() { zurückkehren { formData : { //Abfrageinformationen queryInfo:{ Benutzertyp: 0, deleteFlag: 2, // zeigt alle Typen an pagenum: 1, Seitengröße: 10 }, // Das Benutzertyp-Auswahlfeld wählt derzeit den angezeigten Label-Wert userTypeLabel: „alle Typen“ aus, // Das Benutzerstatus-Auswahlfeld zeigt derzeit den ausgewählten Labelwert userStatusLabel: „alle Typen“ an. }, // Paging-Informationen pageInfo:{ Seitennummer: 1, Seitengröße: 10, gesamt : 0 } } }, Methoden: { // Benutzerinformationsliste abfragen queryUsers(){ lass _this = dies; //console.log(diese.Seiteninfo); diese.formData.queryInfo.pagenum = diese.pageInfo.pagenum; this.formData.queryInfo.pagesize = this.pageInfo.pagesize; diese.instance.queryUsers( dies.$baseUrl,diese.formData.queryInfo ).dann(res => { //Konsole.log(res.data); wenn (res.data.code == dieser.global.SucessRequstCode){ //Wenn die Abfrage erfolgreich ist_this.pageInfo.total = res.data.data.length; _this.userInfoList = res.data.data; }anders{ Alarm (res.data.message); } }).fangen(Fehler => { alert('Abfrage fehlgeschlagen!'); konsole.log(Fehler); }); } } Auf diese Weise werden die Ereignisantwortmethoden handleSizeChange und handleCurrentChange entfernt. Wenn sich die Paging-Informationen ändern, wird die gebundene Methode queryUsers ausgelöst. Wenn Sie darüber hinaus die Seitengrößen anpassen müssen, legen Sie diese in der Vorlage wie folgt fest: :Seitengrößen=[10,20,30,50,100] 4. ReferenzenDie Entwicklung dieser Komponente bezieht sich im Wesentlichen auf folgende Artikel: Sekundäre Kapselung von Vue+el-pagination, https://blog.csdn.net/weixin_47259997/article/details/107887823. Das Vue-Projekt verwendet El-Paginierung in Elementui, um die gemeinsame Paging-Komponente zu kapseln, https://www.jianshu.com/p/e241e5710fb0/. Damit ist dieser Artikel über den gesamten Prozess der Verwendung von V-Model zur Kapselung von El-Paginierungskomponenten durch Vue abgeschlossen. Weitere relevante Inhalte zur Kapselung von El-Paginierungskomponenten durch V-Model finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass alle 123WORDPRESS.COM in Zukunft unterstützen werden! Das könnte Sie auch interessieren:
|
>>: So fügen Sie in Linux stapelweise Dateipräfixe hinzu
Wie kann ich im offiziellen MySQL-Dump-Tool nur e...
In diesem Artikel wird der spezifische Code für d...
Inhaltsverzeichnis 1. faul 2.trimmen 3.Nummer 4.H...
1. Docker installieren yum installiere Docker #St...
Die spezifische Methode zur Installation von Cent...
1. Proto kompilieren Erstellen Sie einen neuen Pr...
Ich habe mich kürzlich mit Algorithmen beschäftig...
Im vorherigen Blog erfuhren wir die Verwendung un...
Im Zuge des schrittweisen Übergangs von herkömmli...
Die Protokollrotation ist eine sehr gängige Funkt...
iOS 1. URL-Schema Diese Lösung ist grundsätzlich ...
Beim Löschen einer Tabelle oder eines Datenelemen...
Hilfsfunktion mapGetters mapGetters ordnet die Ge...
In diesem Artikel wird der spezifische Code für J...
1. Mobile Auswahl der Formulartexteingabe: Wenn i...