Vue verwendet v-model, um den gesamten Prozess der El-Paginierungskomponenten zu kapseln

Vue verwendet v-model, um den gesamten Prozess der El-Paginierungskomponenten zu kapseln

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. Einleitung

Es 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. Hintergrund

2.1. Konventionelle Paging-Verarbeitungsmethode

Die 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 Problemanalyse

Jede 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:

  1. Es gibt drei zentrale Attributparameter: aktuelle Seitenzahl (current-page), Anzahl der Datensätze pro Seite (page-size) und Gesamtzahl der Datensätze (total). Die Kernattributparameter implementieren eine bidirektionale Verknüpfung durch Binden der Seitendaten der übergeordneten Komponente. Die aktuelle Seitenzahl und die Anzahl der Datensätze pro Seite werden im Allgemeinen durch Bedienen der Paging-Unterkomponente geändert, und die Gesamtzahl der Datensätze wird von der übergeordneten Komponente nach Abfrage der Daten festgelegt.
  2. Es gibt zwei Ereignisse: @size-change (Ereignis „Anzahl der Elemente pro Seite geändert“) und @current-change (Ereignis „aktuelle Seitenzahl geändert“). Diese beiden Ereignisse sind an die entsprechenden Ereignisverarbeitungsmethoden handleSizeChange und handleCurrentChange der übergeordneten Komponente gebunden. Beide rufen die Datenabfragemethode auf. In der Datenabfragemethode wird nach dem Abrufen des Ergebnissatzes die Gesamtzahl der Datensätze festgelegt.

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 Plans

3.1. Benutzerdefinierte Paging-Komponenten

Schreiben 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-Komponente

Registrieren 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. Referenzen

Die 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:
  • Beispielcode einer benutzerdefinierten Vue-Komponente zur Implementierung bidirektionaler V-Model-Bindungsdaten
  • Die Verwendung des V-Modells in Vue3-Komponenten und ausführliche Erklärung
  • Detaillierte Erklärung des Unterschieds zwischen der v-model-Direktive und dem .sync-Modifikator in Vue
  • Eine kurze Diskussion über das Prinzip des bidirektionalen Ereignisbindungs-V-Modells von Vue
  • Grundlegende Implementierungsmethode für die komponentenübergreifende Bindung mithilfe des V-Modells in Vue
  • Probleme und Lösungen bei der Verwendung des V-Modells zum bidirektionalen Binden der Werte von übergeordneten und untergeordneten Komponenten in Vue
  • Lösung für das Eingabefeld des Vue-Formulars, das Fokus- und Unschärfeereignisse nicht unterstützt
  • Detaillierte Verwendung der Formular-Eingabekomponente von Vue unter Verwendung benutzerdefinierter Ereignisse [Datumskomponente und Währungskomponente]
  • Beispielcode für die Eingabebindung eines Vue-Formulars
  • Anomalie bei der Formatierung der chinesischen Eingabemethode der Vue-Formulareingabe
  • Vue-Formulareingabebindung V-Modell

<<:  Lernen Sie die Prinzipien und allgemeinen Operationen von MySQL-Partitionstabellen anhand von Beispielen kennen

>>:  So fügen Sie in Linux stapelweise Dateipräfixe hinzu

Artikel empfehlen

js native Karussell-Plugin-Produktion

In diesem Artikel wird der spezifische Code für d...

Die 13 am häufigsten in Interviews gestellten Fragen zu Vue-Modifikatoren

Inhaltsverzeichnis 1. faul 2.trimmen 3.Nummer 4.H...

Aufbau einer Docker+K8S-Clusterumgebung und verteilte Anwendungsbereitstellung

1. Docker installieren yum installiere Docker #St...

VMware Workstation 14 Pro installiert CentOS 7.0

Die spezifische Methode zur Installation von Cent...

Grafische Erklärung des Funktionsaufrufs der Protodatei in Vue

1. Proto kompilieren Erstellen Sie einen neuen Pr...

Teilen des JS-nativen Quellcodes des Spiels 2048 (das Neueste im Internet)

Ich habe mich kürzlich mit Algorithmen beschäftig...

Tutorial zur Konfiguration des Nginx/Httpd-Reverseproxys für Tomcat

Im vorherigen Blog erfuhren wir die Verwendung un...

Gestaltung von Popup-Fenstern und schwebenden Ebenen im Webdesign

Im Zuge des schrittweisen Übergangs von herkömmli...

So scrollen Sie manuell durch Protokolle im Linux-System

Die Protokollrotation ist eine sehr gängige Funkt...

Beispiel für das Schreiben von mobilem H5 zum Aufrufen einer APP (IOS, Android)

iOS 1. URL-Schema Diese Lösung ist grundsätzlich ...

JavaScript-Implementierung des Verifizierungscode-Falls

In diesem Artikel wird der spezifische Code für J...

Fünf praktische Tipps zur Gestaltung von Webformularen

1. Mobile Auswahl der Formulartexteingabe: Wenn i...