Encapsulación basada en paginación vue+element

Escenario del proyecto:

La paginación también es una existencia muy común en nuestras aplicaciones prácticas. De hecho, la paginación en sí misma es muy buena en elementos, pero se usa mucho, por lo que es necesario encapsularla, principalmente para reducir la redundancia de código y mejorar la eficiencia del desarrollo. y reducir el costo del mantenimiento posterior.


Comprender la paginación

Aquí hay un ejemplo de una paginación normal.

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

el efecto es asi

inserte la descripción de la imagen aquí
Entre ellos, se utilizan siete campos que usamos comúnmente:

1.página actual

:current-page="currentPage"

Representa la página actual, y puede ingresar cualquier número de página existente para saltar. Los efectos principales son los siguientes:
inserte la descripción de la imagen aquí

2.tamaños de página

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

Se utiliza para establecer cuántos elementos se muestran por página. Los efectos principales son los siguientes:
inserte la descripción de la imagen aquí

3. tamaño de página

:page-size="100"

Establezca cuántos elementos se muestran de forma predeterminada (aquí el valor predeterminado es 100), los efectos principales son los siguientes:
inserte la descripción de la imagen aquí

4.diseño

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

Se utiliza para establecer el diseño del componente, y los nombres de los subcomponentes están separados por comas, el efecto es el siguiente:
inserte la descripción de la imagen aquí
Descripción del campo:

  • total : el número total de páginas
  • tamaños: cuántos elementos se muestran en una página
  • anterior: página anterior
  • buscapersonas: haga clic en el número de página para saltar (solo permite saltar a las páginas superior e inferior y a las páginas de inicio y final)
  • siguiente: página siguiente
  • jumper: Ingrese para saltar a cualquier página existente

5.total

:total="400"

Muestra el número total de páginas, el efecto es el siguiente.
inserte la descripción de la imagen aquí

6.cambio de tamaño

@size-change="handleSizeChange"

Activar un evento, que se activa cuando cambia el tamaño de la página, es decir, cuando cambia la página.
inserte la descripción de la imagen aquí

7.cambio de corriente

@current-change="handleCurrentChange"

Trigger event, se activará cuando cambie la página actual, es decir, se activará cuando se modifique el número de elementos que se muestran en cada página.


Paginación del paquete:

Después de averiguar el significado de cada campo, se puede encapsular.
La idea principal es que el componente encapsulado pasa página actual, total, tamaños, buscapersonas, puente a través del componente principal, y cuando se activan los eventos @size-change, @current-change, la información del evento se pasa al componente principal.

Crear paginación:

inserte la descripción de la imagen aquí

Encapsular

<!-- 
	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>

¡El embalaje está completo!


Usar en la página:

introducir

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


Efecto

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí
¡éxito!

Supongo que te gusta

Origin blog.csdn.net/weixin_44748171/article/details/131921537
Recomendado
Clasificación