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
1. <body background=Bilddateiname bgcolor=Farb...
Inhaltsverzeichnis 1. Fehlertoleranz bei der Joba...
HTML5 ist die nächste Version des HTML-Standards....
Inhaltsverzeichnis Vorwort Ressourcen zum Thema V...
Ich habe vor Kurzem jemandem bei einem Projekt ge...
Manchmal müssen Sie auf einige statische Ressourc...
Inhaltsverzeichnis 1. Übersicht über Docker Consu...
Eine Mehrfachauswahl ist ein Benutzeroberflächene...
In diesem Artikel sind einige sogenannte Spezifik...
Installieren Sie vor der Installation von Tomcat ...
Wie lösche ich Umgebungsvariablen unter Linux? Ve...
Dieser Artikel ist ein integrierter Artikel zum E...
Datenbank-Befehlsspezifikation Alle Datenbankobje...
Geschäftsszenario: Der Besuchsstatus des Besucher...
Inhaltsverzeichnis Übersicht zur Umgebungseinrich...