当前位置:首页 > VUE

vue前端如何实现分页

2026-01-22 07:56:21VUE

vue前端实现分页的方法

使用Element UI的Pagination组件

Element UI提供了成熟的Pagination组件,适合快速集成。安装Element UI后,在模板中添加以下代码:

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

在script部分定义相关数据和方法:

data() {
  return {
    currentPage: 1,
    pageSize: 10,
    total: 0,
    list: []
  }
},
methods: {
  handleSizeChange(val) {
    this.pageSize = val
    this.fetchData()
  },
  handleCurrentChange(val) {
    this.currentPage = val
    this.fetchData()
  },
  fetchData() {
    // 调用API获取数据,传递currentPage和pageSize参数
    axios.get('/api/data', {
      params: {
        page: this.currentPage,
        size: this.pageSize
      }
    }).then(res => {
      this.list = res.data.list
      this.total = res.data.total
    })
  }
}

手动实现分页逻辑

如果不使用UI库,可以手动实现分页功能。首先定义分页数据:

data() {
  return {
    currentPage: 1,
    itemsPerPage: 10,
    allItems: [],
    displayedItems: []
  }
}

创建计算属性来获取当前页数据:

vue前端如何实现分页

computed: {
  paginatedItems() {
    const start = (this.currentPage - 1) * this.itemsPerPage
    const end = start + this.itemsPerPage
    return this.allItems.slice(start, end)
  },
  totalPages() {
    return Math.ceil(this.allItems.length / this.itemsPerPage)
  }
}

添加分页控制方法:

methods: {
  nextPage() {
    if (this.currentPage < this.totalPages) {
      this.currentPage++
    }
  },
  prevPage() {
    if (this.currentPage > 1) {
      this.currentPage--
    }
  },
  goToPage(page) {
    this.currentPage = page
  }
}

在模板中实现分页导航:

vue前端如何实现分页

<div v-for="item in paginatedItems" :key="item.id">
  <!-- 显示项目内容 -->
</div>

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

使用第三方分页库

对于更复杂的需求,可以考虑使用专门的分页库如vue-paginate。安装后可以快速实现分页功能:

import VuePaginate from 'vue-paginate'
Vue.use(VuePaginate)

在模板中使用:

<paginate
  :page-count="totalPages"
  :click-handler="goToPage"
  :prev-text="'Prev'"
  :next-text="'Next'"
  :container-class="'pagination'">
</paginate>

无限滚动分页

对于移动端或需要流畅体验的场景,可以实现无限滚动分页:

data() {
  return {
    page: 1,
    loading: false,
    noMoreData: false
  }
},
methods: {
  handleScroll() {
    if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight - 500) {
      if (!this.loading && !this.noMoreData) {
        this.loadMore()
      }
    }
  },
  loadMore() {
    this.loading = true
    this.page++
    axios.get(`/api/data?page=${this.page}`).then(res => {
      if (res.data.length === 0) {
        this.noMoreData = true
      } else {
        this.items = [...this.items, ...res.data]
      }
      this.loading = false
    })
  }
},
mounted() {
  window.addEventListener('scroll', this.handleScroll)
},
beforeDestroy() {
  window.removeEventListener('scroll', this.handleScroll)
}

分享给朋友:

相关文章

vue如何实现tap

vue如何实现tap

实现Tap事件的方法 在Vue中实现类似移动端的tap事件(轻触)可以通过以下几种方式完成。原生移动端浏览器通常通过touchstart和touchend事件组合模拟tap,而Vue中可以封装自定义指…

vue实现页面分页

vue实现页面分页

Vue实现页面分页的方法 使用Element UI的分页组件 Element UI提供了现成的分页组件el-pagination,可以快速实现分页功能。需要先安装Element UI库。 <…

vue搜索过后实现分页

vue搜索过后实现分页

实现 Vue 搜索后分页的方法 数据绑定与搜索逻辑 在 Vue 组件中定义数据属性,包括原始数据列表、搜索关键词、分页相关参数: data() { return { originalLi…

vue组件传值实现分页

vue组件传值实现分页

Vue组件传值实现分页的方法 在Vue中实现分页功能,通常需要父子组件之间的数据传递。以下是几种常见的传值方式: 使用props传递数据 父组件通过props向子组件传递当前页码和总页数等分页信息…

vue如何实现曲线图

vue如何实现曲线图

使用 ECharts 实现曲线图 在 Vue 项目中安装 ECharts 依赖: npm install echarts --save 引入 ECharts 并创建基础图表组件: <temp…

php实现分页

php实现分页

PHP实现分页的基本方法 使用LIMIT和OFFSET进行数据库查询分页。通过计算当前页码和每页显示数量,动态生成SQL语句。 $page = isset($_GET['page']) ? (in…