1. 程式人生 > 其它 >vue實現分頁器進行資料互動

vue實現分頁器進行資料互動

子元件

<template>
  <div class="pagination">
    <button :disabled="pageNo==1" @click="$emit('getPageNo',pageNo-1)">上一頁</button>
    <button v-if="startNumAndEndNum.start > 1" @click="$emit('getPageNo',1)" :class="{active:pageNo==1}">1</button>
    <button v-if="
startNumAndEndNum.start > 2">···</button> <!-- 中間部分 --> <button @click="$emit('getPageNo',page)" v-for="(page,index) in startNumAndEndNum.end" :key="index" v-if="page>=startNumAndEndNum.start" :class="{active:pageNo==page}">{{page}}</button> <button v-if
="startNumAndEndNum.end < totalPage-1">···</button> <button @click="$emit('getPageNo',totalPage)" v-if="startNumAndEndNum.end < totalPage" :class="{active:pageNo==totalPage}">{{ totalPage }}</button> <button @click="$emit('getPageNo',pageNo+1)" :disabled="pageNo==totalPage
">下一頁</button> <button style="margin-left: 30px">共{{ total }} 條</button> </div> </template> <script> export default { name: "Pagination", props: ["pageNo", "pageSize", "total", "continues"],// 當前頁數,,每頁展示的資料,總資料 ,連續的數字 computed: { //計算有多少頁 totalPage() { return Math.ceil(this.total / this.pageSize); }, //計算出連續的頁碼的起始數字和結束資料數字,連續頁碼數字,至少是5 startNumAndEndNum() { const { continues, pageNo, totalPage } = this; //先定義兩個變數儲存起始數字和結束數字 //注意開始頁不會是0,定義的時候可以為0 let start = 0; let end = 0; // 連續頁碼的數字是5,至少為5頁,如果不夠5頁,做出判斷 //總頁面不足5頁,沒有頁碼多 if (continues > totalPage) { start = 1; end = totalPage; } else { //總頁數大於5,活資料,如果連續頁為5就減去2,如果連續頁是7,就減去3 // 起始資料 start = pageNo - parseInt(continues / 2); //結束資料 end = pageNo + parseInt(continues / 2); //start出現了0或者負數,進行糾正 if (start < 1) { start = 1; end = continues } //end大於總頁數,進行糾正 if(end > totalPage) { start = totalPage-continues+1; end = totalPage; } } return { start, end }; }, }, }; </script> <style lang="less" scoped> .pagination { text-align: center; button { margin: 0 5px; background-color: #f4f4f5; color: #606266; outline: none; border-radius: 2px; padding: 0 4px; vertical-align: top; display: inline-block; font-size: 13px; min-width: 35.5px; height: 28px; line-height: 28px; cursor: pointer; box-sizing: border-box; text-align: center; border: 0; &[disabled] { color: #c0c4cc; cursor: not-allowed; } &.active { cursor: not-allowed; background-color: #409eff; color: #fff; } &:hover { color: #409eff; } } } </style>

父元件給子元件傳遞資料(模擬資料)

   <Pagination
            :pageNo="searchParams.pageNo"
            :pageSize="searchParams.pageSize"
            :total="91"
            :continues="5"
            @getPageNo="getPageNo"
          ></Pagination>

父元件在想請求資料時候的一些資訊

 data() {
    return {
      //帶給伺服器的引數
      searchParams: {
        pageNo:1, //預設在第幾頁
        pageSize: 3, //每頁幾條資料
      },
    };
  },

通過自定義事件,整理傳遞的引數,然後再請求資料

  //獲取當前第幾頁
    getPageNo(pageNo){
        // console.log(pageNo)
        //整理給伺服器的引數
        this.searchParams.pageNo=pageNo;
        this.getData()
    },