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>

完结。

相关推荐
代码不加糖6 小时前
js中不会冒泡的事件有哪些?
前端·javascript·vue.js
懂懂tty6 小时前
Vue2与Vue3之间API差异
前端·javascript·vue.js
老毛肚7 小时前
软件测试期末考试
vue.js
杨若瑜8 小时前
本地开发环境慢?localhost的锅!
vue.js
xsbcme12 小时前
VueTabRouter 插件实践(一):多标签页不是一排 TabBar
vue.js
云水一下13 小时前
Vue.js从零到精通系列(三):组件化基础——Props、Emits、插槽与生命周期
前端·javascript·vue.js
英勇无比的消炎药15 小时前
少踩坑TinyVue插槽事件编码规范详解
vue.js
2401_8685347817 小时前
5G和4G接入网对比介绍
vue.js
chushiyunen17 小时前
vue export default
前端·javascript·vue.js
北极星日淘18 小时前
可买免税店货物与安耐晒——特殊商品代购技术方案
javascript·vue.js·elementui