vue中实现简单的分页功能-逻辑附完整代码,效果展示

效果展示:

在这里插入图片描述

实现

vue分页主要是对数据的操作,针对前端的操作,需要确定以下的变量数据:
(不涉及前后台传值-----只是前端对数据的操作)

  • 所有要分页的数据
  • 每页显示多少条数据
  • 共几页(所有数据/每页显示数据)
  • 每页显示的数据
  • 默认显示第一页内容

1、html的结构

<div id="app">

        <p v-for="item in dataShow" :key="item.id">{{item.id}}---{{item.name}}---{{item.age}}</p>

        <input type="button" value="上一页" @click="prePage">
        <span v-for="i in pageNum" @click="page(i)" :style="{cursor: 'pointer', margin:'10px'}">{{ i }}</span>
        <input type="button" value="下一页" @click="nextPage">
          
    </div>

2、data的模拟数据及变量数据

data:{
            data: [ //模拟的数据
                {id:1,name:'小明',age:12},
                {id:2,name:'小王',age:12},
                {id:3,name:'小李',age:12},
                {id:4,name:'小赵',age:12},
                {id:5,name:'小黄',age:12},
                {id:6,name:'小刘',age:12},
                {id:7,name:'小张',age:12}
            ],
            totalPage: [], // 所有分页的数据
            pageSize: 2, // 每页显示数量
            pageNum: 1,  // 共几页=所有数据/每页现实数量     
            dataShow: [], // 当前显示的数据  
            currentPage: 0 // 默认当前显示第一页
          },

3、计算总共多少页的数据

使用:Math.ceil()向上取整

this.pageNum = Math.ceil(this.data.length / this.pageSize) || 1;//计算有多少页数据,默认为1

4、分割数据,以数组的形式存入totalPage数组中

使用slice方法进行分割

			// 循环页面
            for (let i = 0; i < this.pageNum; i++) {
            // 每一页都是一个数组 形如 [['第一页的数据'],['第二页的数据'],['第三页数据']]
            // 根据每页显示数量 将后台的数据分割到 每一页,假设pageSize为2, 则第一页是1-2条,即slice(0,2),第二页是3-4条,即slice(3,4)以此类推
            this.totalPage[i] = this.data.slice(this.pageSize * i, this.pageSize * (i + 1))
            }

5、默认显示第一页数据

// 获取到数据后默认显示第一页内容
this.dataShow = this.totalPage[this.currentPage];

6、上一页下一页,只需要切换currentPage的值,修改当前页显示数据就可以

 			// 下一页
            nextPage() {
              if (this.currentPage === this.pageNum - 1) return ;
              this.dataShow = this.totalPage[++this.currentPage];
            },
            // 上一页
            prePage() {
              if (this.currentPage === 0) return ;
              this.dataShow = this.totalPage[--this.currentPage];
            }

7、通过点击页码进行修改currentPage的值,来修改当前页显示数据

			// 点击页码,i是通过指令传递过来的值
            page(i){
                this.currentPage = i
                this.dataShow = this.totalPage[i-1];
            }

到这里已经基本的完成来所有的步骤,可以进行简单的页面切换,下面贴上完整的代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
    <link href="https://cdn.jsdelivr.net/npm/animate.css@3.5.1" rel="stylesheet" type="text/css">
    <title>Document</title>
</head>
<body>
    <div id="app">
		
        <p v-for="item in dataShow" :key="item.id">{{item.id}}---{{item.name}}---{{item.age}}</p>

        <input type="button" value="上一页" @click="prePage">
        <span v-for="i in pageNum" @click="page(i)" :style="{cursor: 'pointer', margin:'10px'}">{{ i }}</span>
        <input type="button" value="下一页" @click="nextPage">
          
    </div>

    <script>

      var vm = new Vue({
          el:'#app',
          data:{
            data: [ //模拟数据
                {id:1,name:'小明',age:12},
                {id:2,name:'小王',age:12},
                {id:3,name:'小李',age:12},
                {id:4,name:'小赵',age:12},
                {id:5,name:'小黄',age:12},
                {id:6,name:'小刘',age:12},
                {id:7,name:'小张',age:12}
            ],
            totalPage: [], // 所有分页的数据
            pageSize: 2, // 每页显示数量
            pageNum: 1,  // 共几页=所有数据/每页现实数量     
            dataShow: [], // 当前显示的数据  
            currentPage: 0 // 默认当前显示第一页
          },
          created(){
            this.pageNum = Math.ceil(this.data.length / this.pageSize) || 1;//计算有多少页数据,默认为1

            // 循环页面
            for (let i = 0; i < this.pageNum; i++) {
            // 每一页都是一个数组 形如 [['第一页的数据'],['第二页的数据'],['第三页数据']]
            // 根据每页显示数量 将后台的数据分割到 每一页,假设pageSize为2, 则第一页是1-2条,即slice(0,2),第二页是3-4条,即slice(3,4)以此类推
            this.totalPage[i] = this.data.slice(this.pageSize * i, this.pageSize * (i + 1))
            }

            // 获取到数据后默认显示第一页内容
            this.dataShow = this.totalPage[this.currentPage];

          },
          methods:{
            // 下一页
            nextPage() {
              if (this.currentPage === this.pageNum - 1) return ;
              this.dataShow = this.totalPage[++this.currentPage];
            },
            // 上一页
            prePage() {
              if (this.currentPage === 0) return ;
              this.dataShow = this.totalPage[--this.currentPage];
            },
            // 点击页码
            page(i){
                this.currentPage = i
                this.dataShow = this.totalPage[i-1];
            }
        
          }
      })

    </script>
</body>
</html>
  • 12
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现Vue导出Excel表格并且带分页功能,可以使用js-xlsx和file-saver这两个库来实现。以下是具体的实现步骤: 1. 安装js-xlsx和file-saver库 可以使用npm或者yarn来安装这两个库: ``` npm install xlsx file-saver --save ``` 2. 创建一个Excel导出按钮 在Vue组件,可以创建一个按钮来触发Excel导出事件: ``` <template> <div> <button @click="exportExcel">导出Excel</button> </div> </template> <script> import XLSX from 'xlsx' import FileSaver from 'file-saver' export default { data () { return { // 分页相关数据 currentPage: 1, pageSize: 10, total: 100, tableData: [ // 表格数据 ] } }, methods: { exportExcel () { // 导出Excel逻辑 } } } </script> ``` 3. 编写导出Excel逻辑 在exportExcel方法,可以使用js-xlsx和file-saver库来生成Excel文件并下载到本地: ``` exportExcel () { const wb = XLSX.utils.book_new() // 构造表格数据 const sheetData = this.tableData.slice((this.currentPage - 1) * this.pageSize, this.currentPage * this.pageSize) // 构造表格头 const headers = ['列1', '列2', '列3'] const data = [headers, ...sheetData.map(row => [row.col1, row.col2, row.col3])] const ws = XLSX.utils.aoa_to_sheet(data) XLSX.utils.book_append_sheet(wb, ws, 'Sheet1') // 生成Excel文件并下载 const excelFileName = `表格数据_${this.currentPage}.xlsx` const wbout = XLSX.write(wb, { bookType: 'xlsx', type: 'binary' }) const blob = new Blob([s2ab(wbout)], { type: 'application/octet-stream' }) FileSaver.saveAs(blob, excelFileName) } ``` 注意上面的s2ab函数,这是一个将字符串转为ArrayBuffer的函数,可以在导出Excel代码之前定义: ``` function s2ab (s) { const buf = new ArrayBuffer(s.length) const view = new Uint8Array(buf) for (let i = 0; i < s.length; i++) { view[i] = s.charCodeAt(i) & 0xFF } return buf } ``` 4. 实现分页功能 最后,还需要实现分页功能。可以使用element-ui的分页组件来实现: ``` <template> <div> <button @click="exportExcel">导出Excel</button> <el-pagination v-model="currentPage" :page-size="pageSize" :total="total" @current-change="handlePageChange" ></el-pagination> </div> </template> <script> import XLSX from 'xlsx' import FileSaver from 'file-saver' export default { data () { return { currentPage: 1, pageSize: 10, total: 100, tableData: [ // 表格数据 ] } }, methods: { exportExcel () { const wb = XLSX.utils.book_new() const sheetData = this.tableData.slice((this.currentPage - 1) * this.pageSize, this.currentPage * this.pageSize) const headers = ['列1', '列2', '列3'] const data = [headers, ...sheetData.map(row => [row.col1, row.col2, row.col3])] const ws = XLSX.utils.aoa_to_sheet(data) XLSX.utils.book_append_sheet(wb, ws, 'Sheet1') const excelFileName = `表格数据_${this.currentPage}.xlsx` const wbout = XLSX.write(wb, { bookType: 'xlsx', type: 'binary' }) const blob = new Blob([s2ab(wbout)], { type: 'application/octet-stream' }) FileSaver.saveAs(blob, excelFileName) }, handlePageChange (value) { this.currentPage = value } } } </script> ``` 在handlePageChange方法,可以更新当前页码,并重新计算需要导出的表格数据。这样就可以实现分页导出Excel表格了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值