el-pagination 动态切换每页条数、页数切换

news/2024/7/7 19:51:57

目录

业务场景

官方链接

实现效果

使用框架

代码展示

template代码

script代码

变量定义

事件定义

        handleSizeChange事件--实现每页条数改变表格动态变化

        handleCurrentChange事件--切换页码

        css代码

完整代码

总结


业务场景

当表格中的数据量如果非常庞大的时候我们不可能让数据整个全部一下展示出来,导致用户需要无限的往下滚动鼠标,给用户造成不清楚到底有多少数据的一个现象,让用户产生看不到头的焦躁心理。这时候我们可以借助分页器去实现数据的分页效果,根据页数和每页条数去实现真分页。

这个在项目中是经常使用到的一种场景,今天我来分享分享我们具体的实现和需要注意的一些点

官方链接

Pagination 分页:Pagination 分页 | Element Plus

实现效果

这篇博客要实现的是课程和班级的一个绑定关系,当页面加载之后给课程和班级下拉框一个默认值,通过切换课程班级下拉框中的选项之后班级下拉框中的选项也随之变换成,当前选中课程下的所有班级名

使用框架

Vue3+element-plus(1.2.0-beta.5)

代码展示

说明:在本篇博客中我重点分享分页器的时候,关于el-table表格可以参考这篇博客:el-table 列的动态显示与隐藏_吃豆子的恐龙的博客-CSDN博客

template代码

<!-- 分页器 -->
<div class="demo-pagination-block">
    <span class="demo-pagination-block allTotal">共{{ total }}条</span>
    <el-config-provider :locale="locale">
      <el-pagination
        :total="total"
        v-model:current-page="currentPage"
        v-model:page-size="pageSize"
        :page-sizes="[30, 50, 100]"
        :small="small"
        :disabled="disabled"
        :background="background"
        layout="sizes, prev, pager, next"
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange"
      />
    </el-config-provider>
</div>

script代码

变量定义

var total = ref(0); //总条数

// 当前页数
const currentPage = ref(1);

//每页显示条目个数
const pageSize = ref(30);

//是否使用小型分页样式
const small = ref(false);

//是否为分页按钮添加背景色
const background = ref(false);

//是否禁用分页
const disabled = ref(false);

事件定义

handleSizeChange事件--实现每页条数改变表格动态变化

//每页显示条数改变
const handleSizeChange = (val) => {
      searchContent.value = "";
      pageSize.value = val;
      currentPage.value = currentPage.value;    
};

handleCurrentChange事件--切换页码

 //当前页变动
    const handleCurrentChange = (val) => {
      pageSize.value = pageSize.value;
      currentPage.value = val;
      studentData(classID.value, courseID.value, currentPage.value, pageSize.value);
    };

css代码

.demo-pagination-block {
  display: inline-block;
  position: relative;
}

.allTotal {
  position: absolute;
  left: -4em;
  top: 7px;
  color: #606266;
  font-size: 14px;
}

完整代码

<template>
    <!-- 分页器 -->
    <div class="demo-pagination-block">
        <span class="demo-pagination-block allTotal">共{{ total }}条</span>
        <el-config-provider :locale="locale">
          <el-pagination
            :total="total"
            v-model:current-page="currentPage"
            v-model:page-size="pageSize"
            :page-sizes="[30, 50, 100]"
            :small="small"
            :disabled="disabled"
            :background="background"
            layout="sizes, prev, pager, next"
            @size-change="handleSizeChange"
            @current-change="handleCurrentChange"
          />
        </el-config-provider>
    </div>
</template>

<script>
import { reactive, ref, onMounted } from "vue";

export default {
  components: {
  },
  setup() {
	//总条数
    var total = ref(0); 

    // 当前页数
    const currentPage = ref(1);
    
    //每页显示条目个数
    const pageSize = ref(30);
    
    //是否使用小型分页样式
    const small = ref(false);
    
    //是否为分页按钮添加背景色
    const background = ref(false);
    
    //是否禁用分页
    const disabled = ref(false);
      
	//每页显示条数改变
	const handleSizeChange = (val) => {
          searchContent.value = "";
          pageSize.value = val;
          currentPage.value = currentPage.value;    
	};


 	//当前页变动
    const handleCurrentChange = (val) => {
          pageSize.value = pageSize.value;
          currentPage.value = val;
          studentData(classID.value, courseID.value, currentPage.value, pageSize.value);
    };


    return {
      total,
        currentPage,
        pageSize,
        small,
        background,
    	disabled,
        handleSizeChange,
        handleCurrentChange,
    };
  },
};
</script>

<style>
    .demo-pagination-block {
      display: inline-block;
      position: relative;
    }
    
    .allTotal {
      position: absolute;
      left: -4em;
      top: 7px;
      color: #606266;
      font-size: 14px;
}

</style>

关于当前页面的实现可以参考如下博客:

el-table:el-table 列的动态显示与隐藏_吃豆子的恐龙的博客-CSDN博客

el-Dropdown:http://t.csdn.cn/jFp2f

总结

多看官方文档,我们遇到的很多问题其实文档中都有详细说明。

如果有想要交流的内容欢迎在评论区进行留言,如果这篇文档受到了您的喜欢那就留下你点赞收藏脚印支持一下博主~


http://lihuaxi.xjx100.cn/news/479268.html

相关文章

H7068 DIGITAL SYSTEMS AND MICROPROCESSOR DESIGN: COURSEWORK 2022 verilog-仿真

内容: 给cpubank写testbench: 1.the testbench have test a variety of operations the sequence described: i) Reset: The test bench should first reset the register bank. The reset is synchronous. It should also set rrd1, rrd2, d, rwr, rwren to zero. ii) Stor…

【HarmonyOS】调测助手安装失败10内部错误

关于鸿蒙开发通过应用调测助手向watch gt 3 手表安装hap时报错。 问题背景&#xff1a; 鸿蒙开发&#xff0c;使用新建工程的helloworld 没有其他修改&#xff0c;生成hap包。然后通过应用调测助手向watch gt 3 手表安装hap时提示 安装失败:10.内部错误。 Sdk&#xff1a; a…

SpringBoot:模块探究之spring-boot-starters

Spring Boot Starters 是一组方便的依赖描述符&#xff0c;您可以将它们包含在您的应用程序中。您可以获得所需的所有 Spring 和相关技术的一站式服务&#xff0c;而无需搜索示例代码和复制粘贴大量依赖项描述符。 例如&#xff0c;如果想使用 Spring 和 JPA 进行数据库访问&am…

Java | 详解 Java连接mysql数据库、编写使用JdbcUtils工具类、使用数据库连接池、使用JavaTemplate

一、连接mysql数据库 步骤&#xff1a; 1、启动 MySQL &#xff1a;以管理员身份打开 cmd 命令行&#xff0c;输入 net start mysql 2、导入jar包 (1)创建新项目&#xff0c;在项目下创建lib包&#xff0c;用于存放所需要的jar包 (2)拷贝 mysql 驱动包 mysql-connector-j-8.0.3…

vue2中的$符号(内置变量)

$开头的变量只是Vue的命名规则&#xff0c;为了区分普通变量属性&#xff0c;避免我们自己声明或者添加自定义属性导致覆盖。 一、$data vue的实例属性$data是用于获取data里数据的相当于用this获取。 <template><div><p><a click"click()"&…

概要设计说明书(GB8567——88)基于协同的在线表格forture-sheet

概要设计说明书 1引言 1.1编写目的 为了帮助用户更好的了解和使用本在线表格&#xff0c;提高用户与软件的亲和度。 用户手册描述配置和使用改在线表格&#xff0c;以及该软件使用过程中应该注意的一下问题。 1.2背景 说明&#xff1a; 本用户手册所描述的软件系统的名称…

RabbitMQ 第一天 基础 4 RabbitMQ 的工作模式 4.4 Topic 通配符模式 4.5 工作模式总结

RabbitMQ 【黑马程序员RabbitMQ全套教程&#xff0c;rabbitmq消息中间件到实战】 文章目录RabbitMQ第一天 基础4 RabbitMQ 的工作模式4.4 Topic 通配符模式4.4.1 模式说明4.4.2 代码编写4.4.3 小结4.5 工作模式总结第一天 基础 4 RabbitMQ 的工作模式 4.4 Topic 通配符模式 …

嘿ChatGPT,来帮我写代码

最近 ChatGPT 发行了&#xff0c;这是由 OpenAI 开发的AI聊天机器人&#xff0c;专门研究对话。它的目标是使AI系统更自然地与之互动&#xff0c;但是在编写代码时也可以为您提供帮助。您可以让 ChatGPT 做你的编程助理&#xff0c;甚至更多&#xff01;在过去的几天里&#xf…