Vue分页组件的封装方法

 更新时间:2022年07月05日 16:44:28   作者:kanami154  
这篇文章主要为大家详细介绍了Vue分页组件的封装方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

前言

这个是基于vue2的分页封装,仿照elementUI而写的组件。

效果如图

话不多说,直接上代码

<template>
  <div class="pagination">
    <!-- 总页数 -->
    <div class="total">共{{ total }}条</div>
    <!-- 选择每页的条数 -->
    <select name="" id="size_select" v-model="sizes" @change="sizeChange">
      <option v-for="item in pageSizes" :key="item" :value="item">
        {{ item }}条/页
      </option>
    </select>
    <div class="pagenum">
      <!-- 上一页 -->
      <el-button
        icon="el-icon-arrow-left"
        :disabled="backDisabled"
        circle
        @click="back"
      ></el-button>
      <!-- 页码 -->
      <ul>
        <li
          :class="currentPage == item ? 'active' : ''"
          v-for="(item, index) in pagenum"
          :key="index"
          @click="toPage(item)"
        >
          {{ item }}
        </li>
      </ul>
      <!-- 下一页 -->
      <el-button
        icon="el-icon-arrow-right"
        :disabled="forwardDisabled"
        circle
        @click="forward"
      ></el-button>
    </div>
  </div>
</template>
 
<script>
export default {
  name: "pagination",
  props: {
    total: {  // 总数
      type: null,
      required: true,
    },
    pageSizes: { // 可选择的每页条数
      type: Array,
    },
    pageSize: {  // 每页显示的条数
      type: Number,
      required: true,
    },
    currentPage: { // 当前页
      type: Number,
      required: true,
    },
  },
  data() {
    return {
      sizes: this.pageSize,  // 接收props传来的pageSize
      nowPage: this.currentPage,  // 接收props传来的currentPage
    };
  },
  computed: {
    allPage() {  // 计算所有的页数
      return Math.ceil(this.total / this.pageSize);
    },
    backDisabled() {  // 是否禁用上一页
      return this.currentPage == 1;
    },
    forwardDisabled() { // 是否禁用下一页
      return this.currentPage == this.allPage;
    },
    pagenum() {   // 计算显示不同的页
      if (this.allPage - this.nowPage > 6) {  //  
        if (this.nowPage > 6) {
          return [
            1,
            "...",
            this.nowPage - 2,
            this.nowPage - 1,
            this.nowPage,
            this.nowPage + 1,
            this.nowPage + 2,
            "...",
            this.allPage,
          ];
        } else {
          if (this.allPage > 8) {
            return [1, 2, 3, 4, 5, 6, "...", this.allPage];
          } else {
            return this.allPage;
          }
        }
      } else {
        if (this.nowPage < 6) {
          return this.allPage;
        } else {
          return [
            1,
            "...",
            this.allPage - 5,
            this.allPage - 4,
            this.allPage - 3,
            this.allPage - 2,
            this.allPage - 1,
            this.allPage,
          ];
        }
      }
    },
  },
  methods: {
    sizeChange() {  // 每页限制条数改变触发事件
      this.$emit("sizeChange", this.sizes);
    },
    forward() {  // 点击下一页
      this.$emit("currentChange", (this.nowPage += 1));
    },
    back() {  // 点击上一页
      this.$emit("currentChange", (this.nowPage -= 1));
    },
    toPage(val) {  // 点击页数
      if (val == "...") {
        console.log(2);
      } else {
        this.nowPage = val;
        this.$emit("currentChange", val);
      }
    },
  },
};
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • vue单页面如何解决多个视频同时仅能播放一个问题

    vue单页面如何解决多个视频同时仅能播放一个问题

    这篇文章主要介绍了vue单页面如何解决多个视频同时仅能播放一个问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • vue3中给数组赋值丢失响应式的解决

    vue3中给数组赋值丢失响应式的解决

    这篇文章主要介绍了vue3中给数组赋值丢失响应式的解决方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • 解决element-ui table设置列fixed时X轴滚动条无法拖动问题

    解决element-ui table设置列fixed时X轴滚动条无法拖动问题

    这篇文章主要介绍了解决element-ui table设置列fixed时X轴滚动条无法拖动问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • Vue3.3 + TS4构建实现ElementPlus功能的组件库示例

    Vue3.3 + TS4构建实现ElementPlus功能的组件库示例

    Vue.js 是目前最盛行的前端框架之一,而 TypeScript 则是一种静态类型言语,它能够让开发人员在编写代码时愈加平安和高效,本文将引见如何运用 Vue.js 3.3 和 TypeScript 4 构建一个自主打造媲美 ElementPlus 的组件库
    2023-10-10
  • uniapp使用uview的简单案例

    uniapp使用uview的简单案例

    uView是uni-app生态专用的UI框架,uni-app 是一个使用 Vue.js 开发所有前端应用的框架,这篇文章主要给大家介绍了关于uniapp使用uview的简单案例,需要的朋友可以参考下
    2023-03-03
  • Vue Element Sortablejs实现表格列的拖拽案例详解

    Vue Element Sortablejs实现表格列的拖拽案例详解

    这篇文章主要介绍了Vue Element Sortablejs实现表格列的拖拽案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • vue动态禁用控件绑定disable的例子

    vue动态禁用控件绑定disable的例子

    今天小编就为大家分享一篇vue动态禁用控件绑定disable的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • Element-ui tree组件自定义节点使用方法代码详解

    Element-ui tree组件自定义节点使用方法代码详解

    本文通过实例代码给大家介绍了Element-ui tree组件自定义节点使用方法 ,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • vue.js 实现图片本地预览 裁剪 压缩 上传功能

    vue.js 实现图片本地预览 裁剪 压缩 上传功能

    这篇文章主要介绍了vue.js 实现图片本地预览裁剪压缩上传功能,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-03-03
  • setup+ref+reactive实现vue3响应式功能

    setup+ref+reactive实现vue3响应式功能

    这篇文章介绍了通过setup+ref+reactive实现vue3响应式功能,文中通过示例代码介绍的非常详细。对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-11-11

最新评论