首页 > 其他分享 >【精品】vue3中setup语法糖下通用的分页插件

【精品】vue3中setup语法糖下通用的分页插件

时间:2022-10-11 23:00:08浏览次数:73  
标签:插件 const setup 糖下 value currentPage currentNum 页码 pages

注意:本博客理论基础: https://blog.51cto.com/lianghecai/5743179

效果

请添加图片描述

自定义分页插件:PagePlugin.vue

<script setup lang="ts">
// total :用来传递数据总条数
// pageSize :每页展示几条数据
// currentPage :当前默认页码
// change-page :页码改变时触发的事件,参数为当前页码

const props = defineProps({
  //数据总条数
  total: {
    type: Number,
    default: 88
  },
  //页面大小
  pageSize: {
    type: Number,
    default: 16
  },
  //当前显示的页码
  currentPage: {
    type: Number,
    default: 1
  }
});

let currentNum = ref(props.currentPage);

import {computed, ref} from 'vue'

// 页码显示组合
// 计算总页数
const pages = computed(() => Math.ceil(props.total / props.pageSize ));

const list = computed(() => {
  const result = []
  // 总页数小于等于5页的时候
  if (pages.value <= 5) {
    for (let i = 1; i <= pages.value; i++) {
      result.push(i)
    }
  } else {
    // 总页数大于5页的时候
    // 控制两端的省略号的有无,页码的显示个数与选中页码居中
    if (currentNum.value <= 2) {
      for (let i = 1; i <= 5; i++) {
        result.push(i)
      }
    } else if (currentNum.value >= 3 && currentNum.value <= pages.value - 2) {
      for (let i = currentNum.value - 2; i <= currentNum.value + 2; i++) {
        result.push(i)
      }
    } else if (currentNum.value > pages.value - 2) {
      for (let i = pages.value - 4; i <= pages.value; i++) {
        result.push(i)
      }
    }
  }
  return result;
})

const emit = defineEmits(["changePage"])
function changePage(type) {
  // 点击上一页按钮
  if (type === false) {
    if (currentNum.value <= 1)
      return
    currentNum.value -= 1
  } else if (type === true) {
    // 点击下一页按钮
    if (currentNum.value >= pages.value)
      return
    currentNum.value += 1
  } else {
    // 点击页码
    currentNum.value = type
  }
  emit('changePage',currentNum.value);
}
</script>

<template>
  <div class="my-pagination">
    <a rel="nofollow" href="javascript:;" :class="{ disabled: currentNum === 1 }" @click="changePage(false)">上一页</a>
    <span v-if="currentNum > 3">...</span>
    <a
        href="javascript:;"
        v-for="item in list"
        :key="item"
        :class="{ active: currentNum === item }"
        @click="changePage(item)"
    >{{ item }}</a>
    <span v-if="currentNum < pages - 2">...</span>
    <a rel="nofollow" href="javascript:;" :class="{ disabled: currentNum === pages }" @click="changePage(true)">下一页</a>
  </div>
</template>

<style scoped lang="less">
.my-pagination {
  display: flex;
  justify-content: center;
  padding: 30px;

  > a {
    display: inline-block;
    padding: 5px 10px;
    border: 1px solid #e4e4e4;
    border-radius: 4px;
    margin-right: 10px;

    &:hover {
      color: #27BA9B;
    }

    &.active {
      background: #27BA9B;
      color: #fff;
      border-color: #27BA9B;
    }

    &.disabled {
      cursor: not-allowed;
      opacity: 0.4;

      &:hover {
        color: #333;
      }
    }
  }

  > span {
    margin-right: 10px;
  }
}
</style>

使用插件

<script setup lang="ts">
import PagePlugin from "@/components/PagePlugin.vue";

function changePage(currentPage){
  // alert(currentPage)
  console.log(currentPage)
}
</script>

<template>
  <!--分页-->
  <PagePlugin
      :total="total"
      :pagesize="pageSize"
      :currentPage="pageNum"
      @change-page="changePage"/>
</template>

标签:插件,const,setup,糖下,value,currentPage,currentNum,页码,pages
From: https://blog.51cto.com/lianghecai/5748413

相关文章

  • 特牛的win资源管理器PDF预览插件
    步骤一:下载控件包后解压(废话)步骤二:32位系统:将32位控件复制到C:\Windows\System32    64位系统:将64位控件复制到C:\Windows\SysWOW64  步骤三:win徽标+X  打开Win......
  • 基于Nonebot2搭建QQ机器人(三):插件高级
    目录Nonebot2插件高级一、工作流程1、概念2、简介3、事件处理4、调用协议端接口二、定时任务1、安装插件2、快速使用3、配置插件三、匹配规则1、创建规则2、创......
  • 一个有点像舔狗的插件
    小P读完需要3分钟速读仅需1分钟大家好,我是小P。你是否有这样的苦恼?给暗恋对象发消息等来的都是“嗯”和“我要去洗澡了”?工作中领导和同事只好指责,没有人关心你?就......
  • IDEA 使用 Docker 插件,实现一键自动化部署
    一、docker开启远程连接访问​首先我们要开启docker的远程连接访问。保证不是docker所在的服务器,也能够远程访问docker。Linux版的docker:修改docker.service文件,添加监听......
  • [免费]触控 UITouch 的 UE 虚幻引擎插件
    ##大家好!##我是:Aimo\_皑墨我来介绍一下这个插件!描述:插件一般用于触控设备的使用如(安卓手机,平板)等触控设备>GitHub下载地址:https://github.com/Aimo......
  • 记录一次关于使用leaflet draw 插件叠加图层删除绘制层无法删除的问题
    问题描述业务逻辑是这样的:再地图上已经绘制了一个多边形区域,然后需要再绘制的区域下再绘制下级区域,使用插件可以正常绘制并保存绘制数据,然后再回显编辑的时候,此时地图展示......
  • VS插件Git的使用
    1、克隆代码。2、新建自己的分支3、切换分支4、代码更改文件数5、代码暂存至本地6、本地代码暂存次数7、代码推送至远程8、查看修改记录9、查看某次提......
  • IDEA翻译插件(Translation)不能用啦?
    不知道大家最近有没有发现,Translation不能用了。因为Google那边的原因,这个插件的接口,访问不通了。我当时本来是打算寻找一些替代品,比如:有道。但是毕竟不是内置的,而且,我......
  • eclipse 安装sts插件
    1、在线安装http://download.springsource.com/release/TOOLS/update/e4.16/a、查看eclise版本,把对应的版本修改下b、点击help-installnewsoftware,输入name和url,勾选......
  • VSCode 插件 vsix格式文件 离线安装
    场景 有些时候内网不能上网,则需要从共享目录直接安装下载好的vsix格式文件一、假设已经有了vsix离线文件(下载vsix暂不了解,后抽空补)二、文件放在vscode的安装目录......