Vue 之 在当前页面的实现分页效果

目录

场景

假设,我们现在有这么一个需求:

上述图片的空白内容是活动的,由下面的两个按钮控制上一页、下一页;我们应该可以怎么去实现?

实现

思路:

其实这个问题,我们仿照其他的UI框架应该也可以获取大致思路,例如:element-ui;

可以将空白内容作为一个table的某一页数据,然后点击底部的分页组件的上一页或者下一页,来做到数据的切页效果。

这里使用vue element admin 中的一个综合table来看下效果图

这下有没有感觉顿时思路就来了

定义变量,当前页码currentPage、每页数据数量pageSize,总数据源列表dataList

点击按钮切换页码,监听页码的变化获取到当前页的数据,从而渲染到页面上。

注意点,这里建议使用计算属性computed,而不是监听属性watch,为什么?这是因为计算属性的一个特性:计算属性相比监听而言,计算属性具有缓存特性,直白的说,计算属性的依赖(也就是计算属性中所用到的变量)如果不变,那么计算属性不会被再次调用,从而进一步的提高性能。

代码如下:

javascript 复制代码
<template>
  <div>
    <!-- 数据列表 -->
    <ul>
      <li v-for="item in currentPageData" :key="item.id">{{ item.content }}</li>
    </ul>
    
    <!-- 分页控件 -->
    <button @click="prevPage" :disabled="currentPage === 1">上一页</button>
    <button @click="nextPage" :disabled="currentPage === totalPages">下一页</button>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      currentPage: 1,
      pageSize: 10,
      dataList: [], // 假设这是从服务器获取的数据列表
    };
  },
  computed: {
    totalPages() {
      return Math.ceil(this.dataList.length / this.pageSize);
    },
    currentPageData() {
      let start = (this.currentPage - 1) * this.pageSize;
      let end = start + this.pageSize;
      return this.dataList.slice(start, end);
    },
  },
  methods: {
    nextPage() {
      if (this.currentPage < this.totalPages) {
        this.currentPage++;
      }
    },
    prevPage() {
      if (this.currentPage > 1) {
        this.currentPage--;
      }
    },
  },
};
</script>

完结。

相关推荐
cgsthtm11 分钟前
RuoYi.Net后端返回雪花ID前端精度丢失问题
oracle·vue·精度丢失·雪花id·ruoyi.net
无光末阳14 分钟前
vue 环境下多个定时器的创建与暂停的统一封装
前端·vue.js
慧一居士1 小时前
src/App.vue 和 public/index.html 关系和区别
前端·vue.js
念你那丝微笑1 小时前
vue实现批量导出二维码到PDF(支持分页生成 PDF)
前端·vue.js·pdf
不太会写2 小时前
又开始了 小程序定制
vue.js·spring boot·python·小程序
Jerry_Rod2 小时前
vue 项目如何使用 mqtt 通信
前端·vue.js
小茴香3532 小时前
Vue 脚手架(Vue CLI)
前端·javascript·vue.js
玩代码3 小时前
使用 nvm(Node Version Manager) 高效管理Node.js
node.js·vue·nvm
Stringzhua3 小时前
Vue的Axios介绍【9】
前端·javascript·vue.js
siaikin3 小时前
基于 Astro Starlight 的多框架文档
前端·vue.js·markdown