vue3 + ts分页实现

该代码示例展示了如何在JavaScript(可能是Vue.js环境中)中实现分页功能。通过设置默认变量如currentPage、pageSize和totalArticleCount,以及使用ref绑定状态,当用户滚动到底部时,会调用getArticleList函数获取更多数据。接口返回的数据被处理并拼接到现有的数据列表中,同时更新总条数和判断是否需要继续加载更多页。
摘要由CSDN通过智能技术生成
// js中设置默认变量
const currentPage = ref(1) // 页数
const pageSize = 10 // 每页数量
const blogArticleList = ref(null) // 返回数据
const totalArticleCount = ref(null) // 判断是否需要分页变量
const sort = ref(null) // 接口需要传的特殊参数
const getArticleList = (blogTypeSecond) => {
  const data = {
    blogType: '10001',
    blogTypeSecond,
    pageSize,
    pageNum: currentPage.value
  }
  // 接口调用
  api.blog.queryBlog(data).then((res) => {
  // 将获取到的数据进行处理 
  // 如果数据只有1页则正常展示获取到的第一页数据 若不止一页则将第下一页获取到的数据与第一页数据进行拼接
    blogArticleList.value = res.data.records ? (currentPage.value === 1 ? res.data.records : blogArticleList.value.concat(res.data.records)) : []
    // 获取到总数据总数 进行赋值
    totalArticleCount.value = res.data.total
    // 如果每页的数量*当前页数页数 >= 返回数据的总个数 则不需要继续加载 否则页数继续++
    if (pageSize * currentPage.value >= res.data.total) {
    // 不需要继续++ 标识
      finished.value = true
    } else {
      currentPage.value++
    }
    // 处理返回的数据
    if (blogArticleList.value.length > 0) {
      blogArticleList.value.map((i) => {
        if (typeof i.blogLabel === 'string') {
          i.blogLabel = JSON.parse(String(i.blogLabel))
        }
      })
    }
  })
}
// 监听滚动事件
const onScroll = (e) => {
// e中包括所有滑动数据
// 当滑动到底部 !finished.value时 再次调用获取数据接口
    if (!finished.value && Math.round(e.target.scrollTop) + e.target.clientHeight === e.target.scrollHeight) {
      getArticleList('')
    }
  }
}

屏幕录制2023-02-03 17.07.55

以上为简单的分页实现,请大佬多多指教!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,作为AI语言模型,我无法提供代码编写服务。但是,我可以为您提供一些指导和建议。 首先,您需要安装Vue3、TypeScript和ElementUI。然后,您可以创建一个Vue组件,该组件包含一个分页表格。您可以使用ElementUI的el-table和el-pagination组件实现这个分页表格。 在组件中,您需要定义一些数据,例如表格数据、当前页码、每页显示的行数等。您还需要定义一些方法来处理分页和表格数据的加载。 以下是一个简单的示例: ```html <template> <div> <el-table :data="tableData" border> <el-table-column prop="name" label="Name"></el-table-column> <el-table-column prop="age" label="Age"></el-table-column> <el-table-column prop="address" label="Address"></el-table-column> </el-table> <el-pagination @current-change="handleCurrentChange" :current-page="currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="totalRows" ></el-pagination> </div> </template> <script lang="ts"> import { defineComponent } from 'vue'; import { ElTable, ElTableColumn, ElPagination } from 'element-plus'; export default defineComponent({ name: 'PaginationTable', components: { ElTable, ElTableColumn, ElPagination }, data() { return { tableData: [], currentPage: 1, pageSize: 10, totalRows: , }; }, methods: { async loadData() { // load data from server based on currentPage and pageSize // update tableData and totalRows }, handleCurrentChange(page: number) { this.currentPage = page; this.loadData(); }, }, mounted() { this.loadData(); }, }); </script> ``` 在这个示例中,我们使用了ElementUI的el-table和el-pagination组件实现分页表格。我们定义了一些数据,例如表格数据、当前页码、每页显示的行数和总行数。我们还定义了一个loadData方法来加载表格数据,并在mounted钩子中调用它。我们还定义了一个handleCurrentChange方法来处理页码变化事件,并在el-pagination组件中使用它。 当用户点击页码或更改每页显示的行数时,handleCurrentChange方法将被调用,并更新currentPage和pageSize数据。然后,loadData方法将被调用,从服务器加载新的表格数据,并更新tableData和totalRows数据。最后,el-pagination组件将根据这些数据重新渲染分页器。 当然,这只是一个简单的示例。您可能需要根据您的具体需求进行更改和扩展。但是,这个示例应该可以帮助您入门Vue3、TypeScript和ElementUI分页表格的编写。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值