后端分页vue3

<div style="padding: 10px 0">
      <el-pagination
          :current-page="page.pageNum"
          :page-size="page.pageSize"
          :page-sizes="[2, 5, 10, 20]"
          layout="total, sizes, prev, pager, next, jumper"
          :total="total"
          @size-change="handleSizeChange"
          @current-change="handleCurrentChange"
      />
    </div>

<script>
import {reactive, ref, toRefs} from "vue";
import axios from 'axios';

export default {
  setup() {
    //data为表数据
    const data = reactive({
      userInfo: [
        {
          uid: 1,
          username: "星星",
          account: "123",
          password: "123",
        },
        {
          uid: 2,
          username: "月亮",
          account: "456",
          password: "456",
        },
      ],
    });

    //table当前分页参数
    const total = ref(0) //总条数
    const page = reactive({//配置对应的查询参数
      pageNum: 1,
      pageSize: 2,
    });

    // 向后端获取表格数据(分页)
    const getList = () => {
      axios.get('/getList',{
        pageNum : page.pageNum,
        pageSize : page.pageSize
      }).then(res => {
        console.log(res.data.data)
        data.userInfo = res.data.data
        total.value = res.data.total
      })
    };
    getList();
    const handleSizeChange = (val) => {
      page.pageSize = val
      console.log(val)
      getList();
    }
    const handleCurrentChange = (val) => {
      page.pageNum = val
      console.log(val)
      getList();
    }

    return {
      ...toRefs(data),
      ...method,
      total,
      page,
      getList,
      handleSizeChange,
      handleCurrentChange
    };
  },
};
</script>

好的,我可以帮你解答这个问题。 首先,前端需要向后端发送一个请求,请求需要包含当前页码和每页显示的条数。后端接收到请求后,返回当前页的数据以及总数据条数。 接着,前端可以根据总数据条数计算出总页数,并渲染一个分页组件。在分页组件中,我们需要监听页码的变化,当页码变化时,重新向后端发送请求,获取对应页的数据,然后刷新数据显示。 下面是一个简单的使用Vue实现前端接后端分页的示例代码: ```html <template> <div> <table> <thead> <tr> <th>姓名</th> <th>年龄</th> </tr> </thead> <tbody> <tr v-for="(item, index) in list" :key="index"> <td>{{ item.name }}</td> <td>{{ item.age }}</td> </tr> </tbody> </table> <div class="pagination"> <ul> <li v-if="currentPage > 1" @click="currentPage--">上一页</li> <li v-for="page in pages" :key="page" @click="goToPage(page)" :class="{ active: page === currentPage }">{{ page }}</li> <li v-if="currentPage < pages.length" @click="currentPage++">下一页</li> </ul> </div> </div> </template> <script> export default { data() { return { currentPage: 1, // 当前页码 pageSize: 10, // 每页显示条数 total: 0, // 总数据条数 list: [] // 当前页数据 } }, computed: { pages() { // 计算总页数 const pages = [] for (let i = 1; i <= Math.ceil(this.total / this.pageSize); i++) { pages.push(i) } return pages } }, mounted() { this.getList() }, methods: { getList() { // 向后端发送请求,获取当前页数据和总数据条数 // 省略代码 this.list = data.list this.total = data.total }, goToPage(page) { this.currentPage = page this.getList() } } } </script> ``` 在这个示例中,我们使用了一个`list`数组来存储当前页的数据,一个`total`变量来存储总数据条数,以及一个`currentPage`变量来存储当前页码。在`computed`中,我们计算出了总页数,并在分页组件中渲染出来。在数据变化时,我们通过监听页码的变化,重新向后端发送请求,获取对应页的数据,然后刷新数据显示。 希望这个示例对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值