当前位置:首页 > VUE

vue实现文档翻页

2026-01-19 00:42:41VUE

Vue实现文档翻页的方法

使用v-for和计算属性分页

通过计算属性对数据进行分页处理,结合v-for渲染当前页内容。

<template>
  <div>
    <div v-for="item in paginatedData" :key="item.id">{{ item.content }}</div>
    <button @click="prevPage" :disabled="currentPage === 1">上一页</button>
    <span>{{ currentPage }} / {{ totalPages }}</span>
    <button @click="nextPage" :disabled="currentPage === totalPages">下一页</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentPage: 1,
      pageSize: 5,
      allData: [] // 这里存放所有文档数据
    }
  },
  computed: {
    paginatedData() {
      const start = (this.currentPage - 1) * this.pageSize
      const end = start + this.pageSize
      return this.allData.slice(start, end)
    },
    totalPages() {
      return Math.ceil(this.allData.length / this.pageSize)
    }
  },
  methods: {
    nextPage() {
      if (this.currentPage < this.totalPages) {
        this.currentPage++
      }
    },
    prevPage() {
      if (this.currentPage > 1) {
        this.currentPage--
      }
    }
  }
}
</script>

使用第三方库vue-awesome-paginate

安装vue-awesome-paginate可以快速实现美观的分页组件。

npm install vue-awesome-paginate
<template>
  <div>
    <div v-for="item in paginatedData" :key="item.id">{{ item.content }}</div>
    <vue-awesome-paginate
      :total-items="allData.length"
      :items-per-page="pageSize"
      v-model="currentPage"
    />
  </div>
</template>

<script>
import { VueAwesomePaginate } from 'vue-awesome-paginate'

export default {
  components: {
    VueAwesomePaginate
  },
  data() {
    return {
      currentPage: 1,
      pageSize: 5,
      allData: []
    }
  },
  computed: {
    paginatedData() {
      const start = (this.currentPage - 1) * this.pageSize
      const end = start + this.pageSize
      return this.allData.slice(start, end)
    }
  }
}
</script>

结合后端API实现分页

对于大量数据,建议采用后端分页方式,每次只请求当前页数据。

<template>
  <div>
    <div v-for="item in pageData" :key="item.id">{{ item.content }}</div>
    <button @click="loadPage(currentPage - 1)" :disabled="currentPage === 1">上一页</button>
    <span>{{ currentPage }}</span>
    <button @click="loadPage(currentPage + 1)" :disabled="isLastPage">下一页</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentPage: 1,
      pageData: [],
      isLastPage: false
    }
  },
  methods: {
    async loadPage(page) {
      const response = await fetch(`/api/documents?page=${page}`)
      const data = await response.json()
      this.pageData = data.items
      this.currentPage = page
      this.isLastPage = data.isLastPage
    }
  },
  created() {
    this.loadPage(1)
  }
}
</script>

实现无限滚动分页

对于移动端或需要流畅浏览体验的场景,可以使用无限滚动方式。

<template>
  <div class="document-container" @scroll="handleScroll">
    <div v-for="item in loadedData" :key="item.id">{{ item.content }}</div>
    <div v-if="isLoading">加载中...</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      loadedData: [],
      currentPage: 1,
      isLoading: false,
      hasMore: true
    }
  },
  methods: {
    async loadMore() {
      if (this.isLoading || !this.hasMore) return

      this.isLoading = true
      const response = await fetch(`/api/documents?page=${this.currentPage}`)
      const data = await response.json()

      this.loadedData = [...this.loadedData, ...data.items]
      this.currentPage++
      this.hasMore = data.hasMore
      this.isLoading = false
    },
    handleScroll(e) {
      const bottomOffset = e.target.scrollHeight - e.target.scrollTop - e.target.clientHeight
      if (bottomOffset < 50) {
        this.loadMore()
      }
    }
  },
  created() {
    this.loadMore()
  }
}
</script>

<style>
.document-container {
  height: 500px;
  overflow-y: auto;
}
</style>

使用Element UI的分页组件

如果项目中使用Element UI,可以直接使用其分页组件。

vue实现文档翻页

<template>
  <div>
    <el-table :data="pageData" style="width: 100%">
      <el-table-column prop="content" label="内容"></el-table-column>
    </el-table>
    <el-pagination
      @current-change="handlePageChange"
      :current-page="currentPage"
      :page-size="pageSize"
      :total="totalItems"
      layout="prev, pager, next">
    </el-pagination>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentPage: 1,
      pageSize: 10,
      totalItems: 0,
      pageData: []
    }
  },
  methods: {
    async handlePageChange(page) {
      this.currentPage = page
      await this.fetchData()
    },
    async fetchData() {
      const response = await fetch(`/api/documents?page=${this.currentPage}&size=${this.pageSize}`)
      const data = await response.json()
      this.pageData = data.items
      this.totalItems = data.total
    }
  },
  created() {
    this.fetchData()
  }
}
</script>

标签: 翻页文档
分享给朋友:

相关文章

vue实现文档分享

vue实现文档分享

Vue 实现文档分享功能 使用 Vue 和第三方库实现文档上传与分享 在 Vue 中实现文档分享功能,通常需要结合文件上传、存储和分享链接生成等步骤。以下是一个常见的实现方案: 安装必要的依赖库:…

h5实现书本翻页动画

h5实现书本翻页动画

实现书本翻页动画的H5技术方案 H5实现书本翻页动画可通过CSS 3D变换、JavaScript动画库或现成的插件完成。以下是三种主流实现方式: 使用CSS 3D变换 通过CSS的trans…

vue实现滚动翻页

vue实现滚动翻页

vue实现滚动翻页的方法 在Vue中实现滚动翻页(无限滚动)可以通过监听滚动事件或使用现成的库完成。以下是几种常见方法: 监听滚动事件实现 通过计算滚动位置触发加载更多数据: // 在组件中 m…

php 实现文档预览

php 实现文档预览

PHP 实现文档预览的方法 在 PHP 中实现文档预览功能通常涉及将文档转换为可预览的格式(如 PDF、HTML 或图片)。以下是几种常见的方法: 使用第三方库转换文档为 PDF 通过调用外部库或工…

vue实现文档预览

vue实现文档预览

Vue 实现文档预览的方法 使用 iframe 嵌入预览 在 Vue 中可以通过 iframe 直接嵌入文档链接实现预览。这种方式适用于 PDF、Word 等浏览器支持直接打开的文档类型。 <…

vue实现文档目录

vue实现文档目录

Vue 实现文档目录的方法 使用动态组件与路由 在 Vue 项目中,可以通过动态组件和路由结合实现文档目录功能。创建一个目录组件,根据路由动态加载对应的文档内容。 <template>…