vue3 使用 Element-plus 的 el-pagination 实现前端分页

前端分页

一、代码如下:

<template>
  <div class="box">
    <el-table
      :loading="tableLoading"
      :data="tableData1"
      element-loading-background="rgba(0, 0, 0, 0.8)"
      highlight-current-row
      class="table_box"
    >
      <el-table-column prop="date" label="日期" width="180"> </el-table-column>
      <el-table-column prop="name" label="姓名" width="180"> </el-table-column>
      <el-table-column prop="address" show-overflow-tooltip label="地址">
      </el-table-column>
    </el-table>
    <div class="paginationBox">
      <el-pagination
        @size-change="handlehSizeChange"
        @current-change="handlehCurrentChange"
        :current-page="CurrentPage"
        :page-sizes="[20, 40, 60, 80, 100]"
        :page-size="PageSize"
        layout="total, jumper , prev, pager, next, sizes"
        :total="Total"
        popper-class="label-popper"
      >
      </el-pagination>
    </div>
  </div>
</template>

<script>
import { defineComponent, reactive, toRefs, onMounted } from "vue";
import TableDataJS from "@/JSON/tableData.js";
export default defineComponent({
  name: "page-eight",
  setup() {
    const { TableDataJSON } = TableDataJS();
    const state = reactive({
      tableLoading: false,
      CurrentPage: 1,
      PageSize: 20,
      Total: 0,
      TotalList: [],
      tableData1:[],
    });
    function tableHeader() {
      return "background:#1C2838;color:#fff;font-size:14px;font-weight:bold;border:0;";
    }
    function queryTableData() {
      state.TotalList = TableDataJSON.tableData; //TableDataJSON.tableData 表格数据
      state.Total = TableDataJSON.tableData.length;
      state.CurrentPage = 1;
      if (TableDataJSON.tableData.length > 20) {
        state.tableData1 =  state.TotalList.slice(
          0,
          state.PageSize
        );
      } else {
        state.tableData1 = TableDataJSON.tableData;
      }
    }
    // 分页
    function handlehSizeChange(val) {
      state.PageSize = val;
      state.CurrentPage = 1;
      const end = state.CurrentPage * val;
      const data = state.TotalList.slice(
        state.TotalList.length > val ? end - val : 0,
        end
      );
      state.tableData1 = data;
    }
    function handlehCurrentChange(val) {
      state.CurrentPage = Math.ceil(val);
      const end = Math.ceil(val) * state.PageSize;
      const data = state.TotalList.slice(end - state.PageSize, end);
      console.log(data,'data')
      state.tableData1 = data;
    }
    onMounted(() => {
      queryTableData();
    });
    return {
      ...toRefs(TableDataJSON),
      ...toRefs(state),
      tableHeader,
      handlehSizeChange,
      handlehCurrentChange,
      queryTableData,
    };
  },
});
</script>

<style>
.box {
  width: 600px;
}
.table_box {
  height: 400px;
  overflow: auto;
}
.paginationBox {
  margin-top: 15px;
  display: flex;
  justify-content: end;
}
</style>

在这里插入图片描述

二、el-pagination分页组件显示中文

将APP.vue文件改造一下:用<el-config-provider :locale="zhCn">包裹一下
复制代码
<template>
  <div id="app">
    <el-config-provider :locale="zhCn">
      <router-view></router-view>
    </el-config-provider>
  </div>
</template>
<script>
import locale from "element-plus/lib/locale/lang/zh-cn";
export default {
  name: "App",
   setup () {
    return {
      zhCn: locale
    }
   }
};
</script>


### 实现 Vue3Element Plus 分页组件 为了在 Vue3 项目中使用 Element Plus分页组件,需先确保已安装并注册了 Element Plus[^1]。 #### 导入和配置分页所需资源 ```javascript import { createApp } from &#39;vue&#39;; import App from &#39;./App.vue&#39;; // 导入Element Plus 和样式文件 import ElementPlus from &#39;element-plus&#39;; import &#39;element-plus/dist/index.css&#39;; const app = createApp(App); app.use(ElementPlus); export default app; ``` 此部分代码展示了如何初始化 Vue 应用程序并将 Element Plus 插件注册至应用实例中。这一步骤对于后续能够正常使用 Element Plus 提供的各种 UI 组件至关重要。 #### 创建带有分页功能的数据表格 下面是一个简单的例子,它创建了一个包含分页控件的数据列表: ```html <template> <div class="pagination-container"> <!-- 数据表 --> <el-table :data="paginatedData" style="width: 100%"> <el-table-column prop="date" label="日期"></el-table-column> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="address" label="地址"></el-table-column> </el-table> <!-- 分页--> <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :page-sizes="[5, 10, 20]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="tableData.length"> </el-pagination> </div> </template> <script setup> import { ref, computed } from &#39;vue&#39;; let tableData = [ // 假设这里有一系列对象组成的数组作为原始数据源... ]; let currentPage = ref(1); // 当前页面索引,默认第一页 let pageSize = ref(10); // 默认每页显示记录数量 function handleSizeChange(val) { console.log(`每页 ${val} 条`); pageSize.value = val; // 更新每页大小 } function handleCurrentChange(val) { console.log(`当前页: ${val}`); currentPage.value = val; // 更新当前页码 } // 计算属性用于获取当前应显示的数据子集 const paginatedData = computed(() => { const start = (currentPage.value - 1) * pageSize.value; const end = start + pageSize.value; return tableData.slice(start, end); }); </script> ``` 上述代码片段实现了基础的分页逻辑,并且允许用户调整每页显示多少项以及跳转到指定页数。`el-pagination` 组件提供了丰富的选项来自定义分页栏的行为和外观,比如设置不同的 `layout` 参数可以改变分页栏内各元素的位置排列方式;而通过监听 `@size-change` 及 `@current-change` 事件则可响应用户的交互操作,从而更新视图中的数据显示范围[^2]。 此外,在实际开发过程中还可以进一步增强该分页组件的功能特性,例如支持自动滚动回顶部、提供更灵活的布局定制能力等高级选项[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值