Encapsulation basée sur la pagination vue+element

Scénario de projet :

La pagination est également une existence très courante dans nos applications pratiques. En fait, la pagination elle-même est très bonne en élément, mais elle est beaucoup utilisée, il est donc nécessaire de l'encapsuler, principalement pour réduire la redondance du code et améliorer l'efficacité du développement. et réduire le coût de la maintenance ultérieure.


Comprendre la pagination

Voici un exemple de pagination normale

<template>
  <div class="block">
    <span class="demonstration">完整功能</span>
    <el-pagination
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
      :current-page="currentPage"
      :page-sizes="[100, 200, 300, 400]"
      :page-size="100"
      layout="total, sizes, prev, pager, next, jumper"
      :total="400">
    </el-pagination>
  </div>
</template>
 
 <script>
  export default {
    
    
    methods: {
    
    
      handleSizeChange(val) {
    
    
        console.log(`每页 ${
      
      val}`);
      },
      handleCurrentChange(val) {
    
    
        console.log(`当前页: ${
      
      val}`);
      }
    },
    data() {
    
    
      return {
    
    
        currentPage: 4
      };
    }
  }
</script>

L'effet est comme ça

insérez la description de l'image ici
Parmi eux, sept champs que nous utilisons couramment sont utilisés :

1.page-courante

:current-page="currentPage"

Il représente la page actuelle et vous pouvez entrer n'importe quel numéro de page existant pour sauter. Les principaux effets sont les suivants :
insérez la description de l'image ici

2.tailles de page

:page-sizes="[100, 200, 300, 400]"

Il est utilisé pour définir le nombre d'éléments affichés par page. Les principaux effets sont les suivants :
insérez la description de l'image ici

3.taille de la page

:page-size="100"

Définissez le nombre d'éléments affichés par défaut (ici la valeur par défaut est 100), les principaux effets sont les suivants :
insérez la description de l'image ici

4. mise en page

layout="total, sizes, prev, pager, next, jumper"

Il est utilisé pour définir la disposition des composants, et les noms des sous-composants sont séparés par des virgules, l'effet est le suivant :
insérez la description de l'image ici
Description du champ :

  • total : le nombre total de pages
  • tailles : combien d'éléments sont affichés sur une page
  • préc : page précédente
  • pager : cliquez sur le numéro de page pour sauter (permettez uniquement de sauter aux pages du haut et du bas et aux pages de début et de fin)
  • suivant : page suivante
  • jumper : Entrez pour accéder à n'importe quelle page existante

5. total

:total="400"

Afficher le nombre total de pages, l'effet est le suivant.
insérez la description de l'image ici

6. changement de taille

@size-change="handleSizeChange"

Déclencher un événement, qui est déclenché lorsque la taille de la page change, c'est-à-dire lorsque la page change.
insérez la description de l'image ici

7.changement actuel

@current-change="handleCurrentChange"

Evénement déclencheur, il sera déclenché lors du changement de la page en cours, c'est-à-dire qu'il sera déclenché lors de la modification du nombre d'éléments affichés sur chaque page.


Pagination du paquet :

Après avoir compris la signification de chaque champ, il peut être encapsulé.
L'idée principale est que le composant encapsulé transmet currentPage, total, sizes, pager, jumper via le composant parent, et lorsque les événements @size-change, @current-change sont déclenchés, les informations sur l'événement sont transmises au composant parent.

Créer une pagination :

insérez la description de l'image ici

Encapsuler

<!-- 
	author:Wh1T3ZzT
	component:分页
	time:2023/07/25
-->
<template>
  <div class="paging">
    <el-pagination
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange"
        :current-page="currentPage"
        :page-sizes="pageSizes"
        :page-size="pageSize"
        :layout="layout"
        :total="total">
      </el-pagination>
  </div>
</template>

<script>
export default {
    
    
  data(){
    
    
    return{
    
    
    }
  },
  props:{
    
    
    currentPage:{
    
    
      default(){
    
    
        return [];
      }
    },
    pageSizes:{
    
    
      default(){
    
    
        return [];
      }
    },
    pageSize:{
    
    
      default(){
    
    
        return [];
      }
    },
    layout:{
    
    
      default(){
    
    
        return [];
      }
    },
    total:{
    
    
      default(){
    
    
        return [];
      }
    }
  },
  methods:{
    
    
    handleSizeChange(val) {
    
    
      this.$emit('handleSizeChange',val)
      console.log(`传给父组件:每页 ${
      
      val}`);
    },
    handleCurrentChange(val) {
    
    
      this.$emit('handleCurrentChange',val)
      console.log(`传给父组件:当前页: ${
      
      val}`);
    },
  }
}
</script>

<style>

</style>

L'emballage est complet !


Utiliser dans la page :

introduire

<template>
  <div>
    <Paging 
       :currentPage="1" 
       :pageSizes="[5,10,20,50,100]" 
       :pageSize="10" 
       layout="total, sizes, prev, pager, next, jumper" 
       :total="10" 
       @handleSizeChange="PagingSizeChange" 
       @handleCurrentChange="PagingCurrentChange"
     ></Paging>
  </div>
</template>

<script>
import Paging from '@/components/paging/index.vue'
export default {
    
    
	methods:{
    
    
    PagingSizeChange(val){
    
    
      console.log(`父组件接收到每页: ${
      
      val}`);
    },
    PagingCurrentChange(val){
    
    
      console.log(`父组件接收到当前页: ${
      
      val}`);
    },
	}
}

</script>


Effet

insérez la description de l'image ici

insérez la description de l'image ici
succès!

Je suppose que tu aimes

Origine blog.csdn.net/weixin_44748171/article/details/131921537
conseillé
Classement