Vuetify中的v-pagination如何实现分页

news2024/11/22 22:19:49

大家好,我是雄雄。

在这里插入图片描述

前言

昨天在改一个系统的时候遇到了个技能点,观察解决了好久,终于解决了,趁热打铁,今天来记录一下。

这个系统是个个人博客,目前我也在使用,但是有个地方用的很不舒服。就是首页,源码的作者本意是让不断的下拉,滚动加载出文章。其实他的这种想法倒是也不错,但是问题有两个:

  1. 如果有篇文章在第5页,那么我们得往下拉,直到滚动加载到了第5页,我们才会发现它。
  2. 博客右边的内容,是自适应的,也就是意外着只要左边没有拉到底,右边一直也就到不了底(这个不知道大家能不能明白)

在这里插入图片描述
所以体验感很不好,我就想着改改吧,按照固有的用户思维,加上个分页,体验感应该会好很多。

实现思路

翻了下他的代码,前端的话,没有集成分页插件,而是写了个无限滚动加载的代码:

<infinite-loading @infinite="infiniteHandler">
          <div slot="no-more" />
        </infinite-loading>

infiniteHandler方法的代码如下:

infiniteHandler($state) {
      let md = require("markdown-it")();
      fetchList(this.params).then(res => {
        if (res.data.records.length) {
          // 去除markdown标签
          res.data.records.forEach(item => {
            if (item.contentMd != null) {
              item.content = md
                .render(item.contentMd)
                .replace(/<\/?[^>]*>/g, "")
                .replace(/[|]*\n/, "")
                .replace(/&npsp;/gi, "");
            }
            this.articleList.push(item);
          });
          this.params.pageNo++;
          $state.loaded();
        } else {
          $state.complete();
        }
      });
    },

主要内容就是从后台接口里面拿到数据之后拼接在articleList数组中,实现的无限滚动加载。

既然我需要改,那就需要将此处的代码彻底的换一下,查了查这个是那个框架,慢慢的从package.json文件中,找到些门路,用的是vuetify``框架。

"vue-social-share": "0.0.3",

按照以往的思路,直接去百度这个框架,它肯定也集成了分页插件,百度了下,还真有,地址为:
Pagination(分页)

在这里插入图片描述
可以发现,有不少样式供我们使用,大家可以找个和自己项目符合的放上来就行,点击<>就能查看源代码,拷贝到项目中,我这边用的是圆形的那个。

<template>
  <div class="text-center">
    <v-pagination
      v-model="page"
      :length="4"
      circle
    ></v-pagination>
  </div>
</template>
<script>
  export default {
    data () {
      return {
        page: 1,
      }
    },
  }
</script>

上面是源代码,我们拿到项目中之后,需要稍微的改改,以我自己的项目为例:

vue代码

 <!--分页-->
        <v-pagination
          style="margin-top: 3%"
          v-model="page.pageIndex"
          :length="page.totalPages"
          :total-visible="page.totalPages"
          circle
          @input="pageClick(page)"
        >
        </v-pagination>
  1. v-model:当前选中的页数,pageIndex是我在data中声明的变量
  2. :length:分页组件的长度,我这边显示的是总页数,后期得改改,一般都是5。
  3. total-visible:指定最大可见分页数
  4. circle:让分页的组件变成圆形,默认是方形的
  5. @input:被绑定模型的更新,也就是我们点击页数,或者上一页、下一页的时候,会走这个方法(这个地方一定要注意,我原来以为只有点击具体页数的时候才会触发,绕了好多弯路)

data中的变量:

page: {
        //当前页
        pageIndex: 1,
        //页大小
        pageSize: 5,
        //总特殊
        totalPages: 0,
        //总记录数
        totalCount: 0
      }

methods中的代码:(主要是用来更新分页数据的)

//分页获取文章信息
    pageClick(page) {
      this.page.pageIndex = page.pageIndex;
      this.articleList = [];
      let md = require("markdown-it")();
      fetchList(this.page).then(res => {
        if (res.data.records.length) {
          // 去除markdown标签
          res.data.records.forEach(item => {
            if (item.contentMd != null) {
              item.content = md
                .render(item.contentMd)
                .replace(/<\/?[^>]*>/g, "")
                .replace(/[|]*\n/, "")
                .replace(/&npsp;/gi, "");
            }
            this.articleList.push(item);
          });
        }
      });
    },

    //初始化获取文章列表
    getArticleListByPageInit() {
      this.articleList = [];
      let md = require("markdown-it")();
      fetchList(this.page).then(res => {
        if (res.data.records.length) {
          // 去除markdown标签
          res.data.records.forEach(item => {
            if (item.contentMd != null) {
              item.content = md
                .render(item.contentMd)
                .replace(/<\/?[^>]*>/g, "")
                .replace(/[|]*\n/, "")
                .replace(/&npsp;/gi, "");
            }
            this.articleList.push(item);
          });
        }
        //总页数放进去
        this.page.totalCount = res.data.total;
        this.page.totalPages = res.data.pages;
      });
    },

忽然发现代码有优化的空间,待会发完文章之后我去优化一下。

getArticleListByPageInit方法是在created里面调用的,也就是让页面一进来我们就先初始化第一页的数据。

后台控制器的分页代码:

@BusinessLogger(value = "首页-用户访问首页",type = "查询",desc = "查询所有文章")
    @GetMapping(value = "/list")
    @ApiOperation(value = "文章列表", httpMethod = "GET", response = ResponseResult.class, notes = "文章列表")
    public ResponseResult listWebArticle(Integer pageIndex,Integer pageSize) {
        return  articleService.listWebArticle(pageIndex,pageSize);
    }

servieImpl中的代码:


    /**
     *  获取文章列表
     * @return
     */
    @Override
    public ResponseResult listWebArticle(Integer pageIndex, Integer pageSize) {
        Page<Object> page = new Page<Object> ();
        page.setCurrent(pageIndex);
        page.setSize(pageSize);
        Page<ArticlePreviewVO> articlePreviewDTOPage =
                baseMapper.selectPreviewPage(page,
                PUBLISH.code,null,null);
        articlePreviewDTOPage.getRecords().forEach(item -> item.setTagVOList(tagsMapper.findByArticleIdToTags(item.getId())));
        return ResponseResult.success(articlePreviewDTOPage);
    }

最后实现的效果如下所示:

在这里插入图片描述


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/101684.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

32 CPP多态

注意: 1 只需要在基类的函数声明中加上virtual关键字&#xff0c;函数定义时不能加&#xff1b; 2 在派生类中重定义虚函数时&#xff0c;函数特征要相同&#xff1b; 3 当在基类中定义了虚函数时&#xff0c;如果派生类没有重定义该函数&#xff0c;那么将使用基类的虚函数…

设计模式原则 - 接口隔离原则(二)

接口隔离原则一 官方定义二 案例演示普通方案案例分析解决方案解决方案案例总结三 与单一职责原则对比一 官方定义 接口隔离原则&#xff08;Interface Segregation Principle&#xff09;&#xff0c;又称为ISP原则&#xff0c;官方定义为&#xff1a; Clients should not be…

docker安装seata单节点的详细教程

一、环境部署 1、在自己的数据库新建seata数据库 2、利用seata官方提供的seata数据库sql脚本创建所需数据库seata以及表&#xff0c;脚本地址如下&#xff1a; seata/mysql.sql at 1.4.1 seata/seata GitHub 3、查看docker官方镜像仓库版本 4、拉取seata安装镜像 docker…

【机器学习实战】基于代价敏感学习的AdaCost方法用于信用卡欺诈检测

1. 数据集 数据集地址&#xff1a;Credit Card Fraud Detection 数据集整体浏览&#xff1a; 284807个样本&#xff0c;30个特征&#xff0c;1个分类标签Class Class为0的是多数类&#xff0c;一共有284315个样本。 Class为1的是少数类&#xff0c;一共有492个样本&#xff…

写给Python社群的第11课:Python线程,进程,协程,3个毫无关系的兄弟

文章目录⛳️ 线程、进程与协程&#x1f525; 进程与线程简介⛳️ Python 多线程模块&#x1f525; threading 模块&#x1f525; threading 模块实践⛳️ Python 并发进程模块&#x1f525; Process 创建多进程⛳️ 线程、进程与协程 线程、进程、协程 这三个名称相似的概念&…

大话设计模型 Task03:工厂、制造、观察

目录一、建造者模式问题描述问题分析模式定义代码实现二、观察者模式问题描述问题分析模式定义代码实现一、建造者模式 问题描述 我的要求是你用程序画一个小人&#xff0c;这在游戏程序里非常常见&#xff0c;现在简单一点&#xff0c;要求是小人要有头、身体、两手、两脚就可…

左偏树原理详解

一 点睛 左偏树&#xff08;leftist tree 或 leftist heap&#xff09;也叫作左偏堆、左倾堆、左式堆&#xff0c;是计算机科学中的一种树&#xff0c;也是一种优先队列实现方式&#xff0c;属于可并堆&#xff0c;在信息学中十分常见&#xff0c;在统计、最值、模拟、贪心等类…

Win11安装WSL2和Nvidia驱动(2022-12-19)

文章目录前言系统环境WSL 1和WSL 2功能对比安装WSL2更新和升级包配置VSCode配置GPU加速安装Nvidia驱动安装Cuda Toolkit通过PyTorch安装CUDA Toolkit测试Nvcc参考链接前言 以前捣鼓过wsl&#xff0c;即Windows下的Linux子系统&#xff0c;但兼容性依然比不过原生的Linux系统&a…

【Linux】进程间通信之管道

目录&#x1f308;前言&#x1f338;1、IPC介绍&#x1f362;1.1、进程间通信的目的&#x1f361;1.2、背景和发展&#x1f360;1.3、进程间通信的分类&#x1f337;2、管道&#x1f361;2.1、概念&#x1f362;2.2、管道的原理&#x1f363;2.3、匿名管道&#x1f364;2.4、管…

DOM算法系列004-判断给定节点是否为body元素

UID: 20221218221939 aliases: tags: source: cssclass: created: 2022-12-18 如果我们要判定给定的一个节点是不是页面body与元素节点&#xff0c;该如何判断呢&#xff1f; 一般来说&#xff0c; 一个HTML页面内只有一个body元素 但是&#xff0c;如果我们非要在页面内写超过…

Spring boot 整合 redis

Spring boot 整合 redis一、Spring boot 整合redis1.1 启动redis1.2 redis desktop manager1.3 常用命令二、操作2.1 依赖包2.2 配置2.3 简单测试2.4 StringRedisTemplate一、Spring boot 整合redis 1.1 启动redis 命令行启动 redis-server redis-cli1.2 redis desktop mana…

基于electronbot作品bootLoader设计

文章目录 前言 一、芯片程序区规划和流程 1、flash区规划 2、两区运行流程 3、bootLoader代码体现 4、electronbot代码体现&#xff1a; 二、bootLoader代码设计 1.下载程序步骤 2.通讯协议格式 三、libusb开发及需要注意的事情 1、bootLoader复合设备 2、electronbot复合设备…

基础算法系列--[基本数据结构KMP]

文章目录前言链表单链表双链表栈和队列栈队列单调KMP前言 今天要搞的是基本的一些数据结构&#xff0c;当然咱们这个不是那么“正经”。当然今天也没啥代码&#xff0c;因为太简单了&#xff08;其实我也想水一下~&#xff09; 链表 单链表 单链表这个东西&#xff0c;应该…

Prometheus+Grafana

K8S prometheusK8S1.Prometheus&#xff08;普罗米修斯&#xff09;2.Prometheus可以做什么3.Prometheus的特点4.prometheus 相关组件二、prometheus与zabbix的区别zabbix架构区别三、prometheus架构分析1.TSDB2.时间序列数据库的特点3.prometheus 相关组件1.prometheus 核心组…

【计算机网络】实验五 网络层与链路层协议分析(PacketTracer)

一、实验目的 通过本实验&#xff0c;进一步熟悉PacketTracer的使用&#xff0c;学习路由器与交换机的基本配置&#xff0c;加深对网络层与链路层协议的理解。 二、实验内容&#xff1a; 4.1 路由器交换机的基本配置 打开下面的实验文件&#xff0c;按提示完成实验。 4.2…

直流微电网中潮流(Matlab代码实现)

目录 1 概述 1.1 直流电网中的潮流 1.2 创新点和相关工作 1.3 本文结构 2 数学/网络模型 2.1 主-从操作 2.2 孤岛运行 3 牛顿法 4 案例及Matlab代码实现 1 概述 潮流是一个非线性问题&#xff0c;需要用牛顿法求解具有恒定功率端子的直流微电网。本文提出了牛顿法在…

曙光来临!Nature终于发现了新冠特效药?或将彻底终结新冠时代!

百趣代谢组学文献分享&#xff1a;2022年即将过去&#xff0c;随着疫苗的全面接种和三年以来“动态清零”的坚持&#xff0c;我们在应对新冠病毒如潮水般的攻击中取得了阶段性成果。虽然大家陆陆续续投入到正常的工作生活中&#xff0c;但是我们都知道新冠并未被“打败”&#…

MySQL中这14个有用的小知识,快学起来吧

前言 我最近用MYSQL数据库挺多的&#xff0c;发现了一些非常有用的小玩意&#xff0c;今天拿出来分享到大家&#xff0c;希望对你会有所帮助。 1.group_concat 在我们平常的工作中&#xff0c;使用group by进行分组的场景&#xff0c;是非常多的。 比如想统计出用户表中&…

如何在产品开发中讨论概念设计?

每当你看到一辆在路上行驶的汽车、书桌上的笔记本电脑、工业包装生产线、医院设备、家用仪器和其他形式的概念设计创意产品会感到难以置信&#xff0c;这就是我们在产品开发中讨论概念设计的原因。 概念设计是一个尚未解决或到目前为止尚未令人满意的问题。这是一个深思熟虑的解…

研究区域制图 | 在 ArcGIS Pro中创建地图布局

研究区域制图 | 在 ArcGIS Pro中创建地图布局 数据准备 首先需要两个图层&#xff0c;一个是市区图层&#xff0c;一个是省行政区划图层&#xff0c;我这里以吉林省以及吉林省长春市为例 新建布局 选择横向A5即可 添加参考线 不知道你们知不知道这个功能&#xff0c;反正小…