• Vue.js+bootstrap前端如何實(shí)現(xiàn)分頁和排序

    小編給大家分享一下Vue.js+bootstrap前端如何實(shí)現(xiàn)分頁和排序,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

    目前創(chuàng)新互聯(lián)已為上千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、網(wǎng)站改版維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、昌邑網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

    效果圖:

    Vue.js+bootstrap前端如何實(shí)現(xiàn)分頁和排序

    語法:

    數(shù)據(jù)綁定 {{...}}或者v-model

    <td >{{dataItem.id}}</td>
    <input v-model="message">

    事件綁定 v-on

    <th v-on:click="sortBy('id')">ID</th>

    循環(huán) v-for

    <option v-for="item in arrPageSize" value="{{item}}">{{item}}</option>

    判斷 v-if

    <span v-if="item==1" class="btn btn-default" v-on:click="showPage(1,$event)">首頁</span>

    過濾器 Vue.filter

    //定義
    Vue.filter( 'name' , function(value) {
      return value * .5 ;
     });
    //使用
    <td>{{dataItem.age | name}}</td>
    <input v-model="message | name">

    排序orderBy

    <tr v-for="dataItem in arrayData | orderBy sortparam sorttype">
      <td >{{dataItem.id}}</td>
      <td >{{dataItem.name}}</td>
      <td>{{dataItem.age}}</td>
    </tr>

    html

    <div id="test" class="form-group">
       <div class="form-group">
        <div class="page-header">
         數(shù)據(jù)
        </div>
        <table class="table table-bordered table-responsive table-striped">
         <tr>
          <th v-on:click="sortBy('id')">ID</th>
          <th>姓名</th>
          <th v-on:click="sortBy('age')">年齡</th>
         </tr>
         <tr v-for="dataItem in arrayData | orderBy sortparam sorttype">
          <td >{{dataItem.id}}</td>
          <td >{{dataItem.name}}</td>
          <td>{{dataItem.age}}</td>
         </tr>
        </table>
        <div class="page-header">分頁</div>
        <div class="pager" id="pager">
         <span class="form-inline">
          <select class="form-control" v-model="pagesize" v-on:change="showPage(pageCurrent,$event,true)" number>
           <option v-for="item in arrPageSize" value="{{item}}">{{item}}</option>
          </select>
         </span>
         <template v-for="item in pageCount+1">
          <span v-if="item==1" class="btn btn-default" v-on:click="showPage(1,$event)">
           首頁
          </span>
          <span v-if="item==1" class="btn btn-default" v-on:click="showPage(pageCurrent-1,$event)">
           上一頁
          </span>
          <span v-if="item==1" class="btn btn-default" v-on:click="showPage(item,$event)">
           {{item}}
          </span>
          <span v-if="item==1&&item<showPagesStart-1" class="btn btn-default disabled">
           ...
          </span>
          <span v-if="item>1&&item<=pageCount-1&&item>=showPagesStart&&item<=showPageEnd&&item<=pageCount" class="btn btn-default" v-on:click="showPage(item,$event)">
           {{item}}
          </span>
          <span v-if="item==pageCount&&item>showPageEnd+1" class="btn btn-default disabled">
           ...
          </span>
          <span v-if="item==pageCount&&item!=1" class="btn btn-default" v-on:click="showPage(item,$event)">
           {{item}}
          </span>
          <span v-if="item==pageCount" class="btn btn-default" v-on:click="showPage(pageCurrent+1,$event)">
           下一頁
          </span>
          <span v-if="item==pageCount" class="btn btn-default" v-on:click="showPage(pageCount,$event)">
           尾頁
          </span>
         </template>
         <span class="form-inline">
          <input class="pageIndex form-control"  type="text" v-model="pageCurrent | onlyNumeric" v-on:keyup.enter="showPage(pageCurrent,$event,true)" />
         </span>
         <span>{{pageCurrent}}/{{pageCount}}</span>
        </div>
       </div>
      </div>

    javascript

     //只能輸入正整數(shù)過濾器
      Vue.filter('onlyNumeric', {
       // model -> view
       // 在更新 `<input>` 元素之前格式化值
       read: function (val) {
        return val;
       },
       // view -> model
       // 在寫回?cái)?shù)據(jù)之前格式化值
       write: function (val, oldVal) {
        var number = +val.replace(/[^\d]/g, '')
        return isNaN(number) ? 1 : parseFloat(number.toFixed(2))
       }
      })
      //模擬獲取數(shù)據(jù)
      var getData=function(){
       var result = [];
       for (var i = 0; i < 500; i++) {
        result[i] ={name:'test'+i,id:i,age:(Math.random()*100).toFixed()};
        }
       return result;
      }
    
      var vue = new Vue({
       el: "#test",
       //加載完成后執(zhí)行
       ready:function(){
        this.arrayDataAll = getData();
        this.totalCount = this.arrayDataAll.length;
        this.showPage(this.pageCurrent, null, true);
       },
       data: {
        //總項(xiàng)目數(shù)
        totalCount: 200,
        //分頁數(shù)
        arrPageSize:[10,20,30,40],
        //當(dāng)前分頁數(shù)
        pageCount: 20,
        //當(dāng)前頁面
        pageCurrent: 1,
        //分頁大小
        pagesize: 10,
        //顯示分頁按鈕數(shù)
        showPages: 11,
        //開始顯示的分頁按鈕
        showPagesStart: 1,
        //結(jié)束顯示的分頁按鈕
        showPageEnd: 100,
        //所有數(shù)據(jù)
        arrayDataAll:[],
        //分頁數(shù)據(jù)
        arrayData: [],
        //排序字段
        sortparam:"",
        //排序方式
        sorttype:1,
    
    
       },
       methods: {
        //分頁方法
        showPage: function (pageIndex, $event, forceRefresh) {
    
         if (pageIndex > 0) {
    
    
          if (pageIndex > this.pageCount) {
           pageIndex = this.pageCount;
          }
    
          //判斷數(shù)據(jù)是否需要更新
          var currentPageCount = Math.ceil(this.totalCount / this.pagesize);
          if (currentPageCount != this.pageCount) {
           pageIndex = 1;
           this.pageCount = currentPageCount;
          }
          else if (this.pageCurrent == pageIndex && currentPageCount == this.pageCount && typeof (forceRefresh) == "undefined") {
           console.log("not refresh");
           return;
          }
    
          //處理分頁點(diǎn)中樣式
          var buttons = $("#pager").find("span");
          for (var i = 0; i < buttons.length; i++) {
           if (buttons.eq(i).html() != pageIndex) {
            buttons.eq(i).removeClass("active");
           }
           else {
            buttons.eq(i).addClass("active");
           }
          }
    
          //從所有數(shù)據(jù)中取分頁數(shù)據(jù)
          var newPageInfo = [];
          for (var i = 0; i < this.pagesize; i++) {
          var index =i+(pageIndex-1)*this.pagesize;
          if(index>this.totalCount-1)break;
           newPageInfo[newPageInfo.length] = this.arrayDataAll[index];
          }
          this.pageCurrent = pageIndex;
          this.arrayData = newPageInfo;
    
          //計(jì)算分頁按鈕數(shù)據(jù)
          if (this.pageCount > this.showPages) {
           if (pageIndex <= (this.showPages - 1) / 2) {
            this.showPagesStart = 1;
            this.showPageEnd = this.showPages - 1;
            console.log("showPage1")
           }
           else if (pageIndex >= this.pageCount - (this.showPages - 3) / 2) {
            this.showPagesStart = this.pageCount - this.showPages + 2;
            this.showPageEnd = this.pageCount;
            console.log("showPage2")
           }
           else {
            console.log("showPage3")
            this.showPagesStart = pageIndex - (this.showPages - 3) / 2;
            this.showPageEnd = pageIndex + (this.showPages - 3) / 2;
           }
          }
         }
         //排序
        },sortBy: function (sortparam) {
         this.sortparam = sortparam;
         this.sorttype = this.sorttype == -1 ? 1 : -1;
        }
       }
      });

    看完了這篇文章,相信你對(duì)“Vue.js+bootstrap前端如何實(shí)現(xiàn)分頁和排序”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

    文章名稱:Vue.js+bootstrap前端如何實(shí)現(xiàn)分頁和排序
    分享地址:http://muchs.cn/article32/gcidsc.html

    成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、企業(yè)網(wǎng)站制作網(wǎng)站設(shè)計(jì)、靜態(tài)網(wǎng)站域名注冊(cè)、網(wǎng)站內(nèi)鏈

    廣告

    聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

    成都網(wǎng)站建設(shè)公司