当前位置:首页 > VUE

vue实现分页6

2026-01-18 10:30:09VUE

Vue实现分页的6种方法

基础分页组件实现

使用Vue的v-for指令和计算属性实现基础分页功能。通过计算总页数并动态渲染页码按钮,结合v-model绑定当前页码。

<template>
  <div class="pagination">
    <button @click="prevPage" :disabled="currentPage === 1">上一页</button>
    <span v-for="page in pages" :key="page">
      <button @click="goToPage(page)" :class="{ active: page === currentPage }">
        {{ page }}
      </button>
    </span>
    <button @click="nextPage" :disabled="currentPage === totalPages">下一页</button>
  </div>
</template>

<script>
export default {
  props: ['totalItems', 'itemsPerPage'],
  data() {
    return {
      currentPage: 1
    }
  },
  computed: {
    totalPages() {
      return Math.ceil(this.totalItems / this.itemsPerPage)
    },
    pages() {
      const range = []
      for (let i = 1; i <= this.totalPages; i++) {
        range.push(i)
      }
      return range
    }
  },
  methods: {
    prevPage() {
      this.currentPage--
    },
    nextPage() {
      this.currentPage++
    },
    goToPage(page) {
      this.currentPage = page
    }
  }
}
</script>

使用第三方库

Element UI、Ant Design Vue等UI库提供现成的分页组件。以Element UI为例:

vue实现分页6

<template>
  <el-pagination
    @size-change="handleSizeChange"
    @current-change="handleCurrentChange"
    :current-page="currentPage"
    :page-sizes="[10, 20, 30, 40]"
    :page-size="pageSize"
    layout="total, sizes, prev, pager, next, jumper"
    :total="total">
  </el-pagination>
</template>

<script>
export default {
  data() {
    return {
      currentPage: 1,
      pageSize: 10,
      total: 100
    }
  },
  methods: {
    handleSizeChange(val) {
      this.pageSize = val
    },
    handleCurrentChange(val) {
      this.currentPage = val
    }
  }
}
</script>

服务器端分页

结合axios实现服务器端分页,传递page和pageSize参数到API接口:

methods: {
  fetchData() {
    axios.get('/api/data', {
      params: {
        page: this.currentPage,
        size: this.pageSize
      }
    }).then(response => {
      this.dataList = response.data.items
      this.total = response.data.total
    })
  }
}

无限滚动分页

使用vue-infinite-loading插件实现无限滚动分页效果:

vue实现分页6

<template>
  <div>
    <div v-for="item in items" :key="item.id">{{ item.content }}</div>
    <infinite-loading @infinite="loadMore"></infinite-loading>
  </div>
</template>

<script>
import InfiniteLoading from 'vue-infinite-loading'
export default {
  components: { InfiniteLoading },
  data() {
    return {
      page: 1,
      items: []
    }
  },
  methods: {
    loadMore($state) {
      axios.get(`/api/items?page=${this.page}`).then(({ data }) => {
        if (data.length) {
          this.items.push(...data)
          this.page++
          $state.loaded()
        } else {
          $state.complete()
        }
      })
    }
  }
}
</script>

动态分页大小

实现可动态调整每页显示数量的分页控件:

<template>
  <div>
    <select v-model="pageSize" @change="resetPagination">
      <option value="5">5条/页</option>
      <option value="10">10条/页</option>
      <option value="20">20条/页</option>
    </select>
    <!-- 分页组件 -->
  </div>
</template>

<script>
export default {
  data() {
    return {
      pageSize: 10
    }
  },
  methods: {
    resetPagination() {
      this.currentPage = 1
      this.fetchData()
    }
  }
}
</script>

分页与路由结合

将分页状态保存在URL中,实现可分享的分页链接:

watch: {
  '$route.query.page'(newPage) {
    this.currentPage = Number(newPage) || 1
    this.fetchData()
  }
},
methods: {
  goToPage(page) {
    this.$router.push({
      query: {
        ...this.$route.query,
        page: page
      }
    })
  }
}

每种方法适用于不同场景,基础分页适合简单需求,第三方库可快速实现标准化分页,服务器端分页处理大数据量,无限滚动提升用户体验,动态分页大小增加灵活性,路由结合实现状态持久化。

标签: 分页vue
分享给朋友:

相关文章

vue页面分离的实现

vue页面分离的实现

Vue页面分离的实现方法 将Vue页面分离为多个组件或模块,有助于提升代码可维护性和复用性。以下是几种常见的实现方式: 组件化拆分 通过将页面拆分为多个子组件,每个组件负责特定功能或UI部分。使用…

vue查看更多怎么实现

vue查看更多怎么实现

实现 Vue 的“查看更多”功能 数据截取与显示控制 通过 v-if 或 v-show 控制内容的显示与隐藏。初始状态下只显示部分内容,点击“查看更多”后展开完整内容。 <template&g…

vue前端分页怎么实现

vue前端分页怎么实现

前端分页实现方法 在Vue中实现前端分页通常涉及数据分割和页面控制逻辑。以下是常见的实现方式: 使用计算属性分页 通过计算属性对数据进行切片处理: computed: { paginate…

vue异步组建实现原理

vue异步组建实现原理

Vue 异步组件实现原理 Vue 的异步组件允许将组件按需加载,通常用于代码分割或延迟加载非关键组件。其核心原理基于 Promise 和动态导入。 基本实现方式 通过 defineAsyncCom…

vue调用接口实现退出

vue调用接口实现退出

实现Vue退出功能的步骤 在Vue中调用接口实现退出功能通常需要与后端API交互,以下是实现方法: 前端实现 创建退出方法,调用后端API接口: methods: { logout() {…

vue实现用户信息删除

vue实现用户信息删除

Vue 实现用户信息删除功能 在 Vue 中实现用户信息删除功能通常涉及前端界面交互和后端 API 调用。以下是实现步骤: 前端界面设计 创建删除按钮或操作项,通常使用 @click 事件触发删除…