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

Wie stelle ich Tomcat als automatisch gestarteten Dienst ein? Der schnellste Weg

Stellen Sie Tomcat so ein, dass der Dienst automa...

Tutorial zur binären Kompilierung und Installation von MySql centos7 unter Linux

// Ich habe einen ganzen Nachmittag für die Insta...

So konfigurieren Sie die CDN-Planung mit dem Modul Nginx_geo

Einführung in das Geo-Modul von Nginx Die Geo-Dir...

Toolkit: Ein leistungsfähigeres Front-End-Framework als Bootstrap

Hinweis: Die derzeit beliebtesten Front-End-Frame...

Drei Prinzipien effizienten Navigationsdesigns, die Webdesigner kennen müssen

Das Entwerfen der Navigation für eine Website ist...

JS implementiert das Schere-Stein-Papier-Spiel

In diesem Artikelbeispiel wird der spezifische JS...

Ein Artikel zum Verständnis der Verwendung von typeof in js

Inhaltsverzeichnis Base Rückgabetyp String und Bo...

MySQL-Startfehler InnoDB: Sperren nicht möglich/ibdata1-Fehler

Beim Starten von MySQL in einer OS X-Umgebung wir...

Shell-Skript zur Überwachung des MySQL-Master-Slave-Status

Geben Sie ein Shell-Skript unter Linux frei, um d...

Select unterstützt kein Doppelklick-DBClick-Ereignis

XML/HTML-CodeInhalt in die Zwischenablage kopiere...

Detailliertes Installationstutorial für Zabbix 4.04 (basierend auf CentOS 7.6)

1. Vorbereitung vor der Installation: 1.1 JDK ins...

So überprüfen Sie die Version des Kali Linux-Systems

1. Überprüfen Sie die Kali-Linux-Systemversion Be...

Erstellen einer KVM-Virtualisierungsplattform auf CentOS7 (drei Möglichkeiten)

KVM steht für Kernel-based Virtual Machine und is...

MySQL-Reihe: Redo-Log, Undo-Log und Binlog – ausführliche Erklärung

Durchführung von Transaktionen Das Redo-Protokoll...

js, um einen einfachen Taschenrechner zu erstellen

In diesem Artikel finden Sie den spezifischen Cod...