亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

vue分頁組件table-pagebar使用實例解析

2019-11-20 09:15:53
字體:
來源:轉載
供稿:網友

之前一直接觸都是原始的前端模型,jquery+bootstrap,冗雜的dom操作,繁瑣的更新綁定。接觸vue后,對前端MVVM框架有了全新的認識。本文是基于webpack+vue構建,由于之前的工作主要是基于java的服務端開發工作,對前端框架和組件的理解,不夠深入,借此來記錄在前端框架使用和構建中的點點滴滴。

此分頁組件參照于bootstrap-datatable底部分頁開發完成,相關參數增加自定義功能。

最終使用展現效果圖如下,數據來源于cnodejs【https://cnodejs.org/】 

底部分頁組件主要由左側當前數據項數量顯示和右側分頁頁碼兩部分組成。組件代碼如下: 

<template xmlns:v-on="http://www.w3.org/1999/xhtml" xmlns:v-bind="http://www.w3.org/1999/xhtml"> <div class="page-bar"> <div class="page-size"> <div> <select v-on:change="menuChange()" v-model="limit"> <option v-for="item in menu" v-bind:value="item">{{item}}</option> </select> 記錄/頁,顯示第 {{start}} 至 {{end}} 項記錄,共 {{totalSize}} 項 </div> </div> <div class="page-con"> <ul> <li><a v-on:click="firstClick()" v-bind:class="{ 'disabled': cur == 1}">首頁</a></li> <li><a v-on:click="preClick()" v-bind:class="{ 'disabled': cur == 1}">上一頁</a></li> <li v-for="per in pages" v-bind:class="{ 'active': cur == per}"> <a v-on:click="pageClick(per)">{{ per }}</a> </li> <li><a v-on:click="nextClick()" v-bind:class="{ 'disabled': cur == totalPage}">下一頁</a></li> <li><a v-on:click="lastClick()" v-bind:class="{ 'disabled': cur == totalPage}">尾頁</a></li> <li><a>共<i>{{totalPage}}</i>頁</a></li> </ul> </div> <div class="clear-both"></div> </div></template><script> import Ajax from '../ajax' export default{ props: ['page-model'], data () { return { // 初始頁 cur: 1, // 請求地址 url: this.pageModel.url ? this.pageModel.url : "", // 請求參數 param: this.pageModel.param ? this.pageModel.param : {}, // 請求方法 默認為GET請求 method: this.pageModel.method ? this.pageModel.method : 'GET', // 每頁顯示數量 默認每頁顯示10條 limit: this.pageModel.menu ? this.pageModel.menu[0] : 10, // 底部分頁基數 默認5 perSize: this.pageModel.perSize ? this.pageModel.perSize : 5, // 每頁顯示數量 下拉選項 menu: this.pageModel.menu ? this.pageModel.menu : [5, 10, 50], // 分頁參數 自定義名稱 pageParamName: this.pageModel.pageParamName ? this.pageModel.pageParamName : ['page', 'limit'], // 當前列表顯示記錄起始數 start: 0, // 當前列表顯示記錄結束數 end: 0, // 總頁數 totalPage: 0, // 記錄總數 totalSize: 0, // 分頁請求返回數據 dataList: [] } }, ready () { this.getData(); }, methods: { // 首頁 firstClick: function () { if (this.cur > 1) { this.cur = 1; this.getData(); } }, // 尾頁 lastClick: function () { if (this.cur < this.totalPage) { this.cur = this.totalPage; this.getData(); } }, // 上一頁 preClick: function () { if (this.cur > 1) { this.cur--; this.getData(); } }, // 下一頁 nextClick: function () { if (this.cur < this.totalPage) { this.cur++; this.getData(); } }, // 頁碼 pageClick: function (data) { if (data != this.cur) { this.cur = data; this.getData(); } }, // 刷新顯示記錄數 refreshPageCon: function () { this.start = (this.cur - 1) * this.limit + 1; if (this.totalSize >= this.limit * this.cur) { this.end = this.limit * this.cur; } else { this.end = this.totalSize; } }, // 分頁請求 getData: function () { let _this = this; this.param[this.pageParamName[0]] = this.cur; this.param[this.pageParamName[1]] = this.limit; Ajax({ url: _this.url, method: _this.method, data: _this.param, callback: function (res) { // 返回結果數據集 this.dataList = res.data; // 返回總記錄數 _this.totalSize = 25; _this.totalPage = Math.ceil(_this.totalSize / _this.limit); _this.refreshPageCon(); _this.$dispatch('refresh', this.dataList); } }); }, // 每頁顯示記錄數 下拉 menuChange: function () { this.getData(); }, getPage: function (curPage, totalPage, pageNum) { var leftPage, rightPage; curPage = curPage > 1 ? curPage : 1; curPage = curPage > totalPage ? totalPage : curPage; totalPage = curPage > totalPage ? curPage : totalPage; // 左側頁數 leftPage = curPage - Math.floor(pageNum / 2); leftPage = leftPage > 1 ? leftPage : 1; // 右側頁數 rightPage = curPage + Math.floor(pageNum / 2); rightPage = rightPage > totalPage ? totalPage : rightPage; var curPageNum = rightPage - leftPage + 1; // 左側調整 if (curPageNum < pageNum && leftPage > 1) { leftPage = leftPage - (pageNum - curPageNum); leftPage = leftPage > 1 ? leftPage : 1; curPageNum = rightPage - leftPage + 1; } // 右側調整 if (curPageNum < pageNum && rightPage < totalPage) { rightPage = rightPage + (pageNum - curPageNum); rightPage = rightPage > totalPage ? totalPage : rightPage; } var arr = []; for (var i = leftPage; i <= rightPage; i++) { arr.push(i); } return arr; } }, computed: { pages: function () { return this.getPage(this.cur, this.totalPage, this.perSize); } } }</script><style> ul, li { margin: 0px; padding: 0px; } li { list-style: none; display: inline; } .page-bar li:first-child > a { margin-left: 0px } .page-bar a { border: 1px solid #ddd; text-decoration: none; position: relative; float: left; padding: 6px 12px; margin-left: -1px; line-height: 1.42857143; color: #337ab7; cursor: pointer; } .page-bar a:hover { background-color: #eee; } .page-bar .active a { color: #fff; cursor: default; background-color: #337ab7; border-color: #337ab7; } .page-bar i { font-style: normal; color: #d44950; margin: 0px 4px; font-size: 12px; } .page-bar .page-con, .page-size { width: 50%; display: block; height: 30px; float: left; line-height: 30px; } .page-bar .page-con ul { float: right; padding-left: 15px; padding-right: 15px; display: inline-block; padding-left: 0; } .page-bar .page-size div { padding-left: 15px; padding-right: 15px; font-size: 14px; } a.disabled { color: #777; background-color: #fff; border-color: #ddd; cursor: not-allowed; } a.disabled:hover { background-color: #fff; } .clear-both { clear: both; } select { border: solid 1px #ddd; appearance: none; -moz-appearance: none; -webkit-appearance: none; background: url("../assets/images/arrow.png") no-repeat scroll right center transparent; padding-right: 15px; padding-left: 15px; padding-top: 2px; padding-bottom: 2px; } select::-ms-expand { display: none; }</style>

組建模塊使用, 

<template> <Navbar></Navbar> <div class="row"> <table class="table"> <thead> <tr> <th>標題</th> <th width="20%">發布時間</th> <th width="10%">作者</th> <th width="10%">回復數</th> <th width="10%">訪問數</th> </tr> </thead> <tbody> <tr v-show="!tabelEmpty" v-for="item in dataList"> <td>{{item.title}}</td> <td>{{item.create_at}}</td> <td>{{item.author.loginname}}</td> <td>{{item.reply_count}}</td> <td>{{item.visit_count}}</td> </tr> <tr v-show="tabelEmpty" class="empty"> <td colspan="5">沒有匹配的記錄</td> </tr> </tbody> </table> </div> <Pagebar :page-model="pageModel"></Pagebar></template><script> import Navbar from '../components/navbar.vue' import Pagebar from '../components/table-pagebar.vue' export default {//這里是官方的寫法,默認導出,ES6 components: { Navbar, Pagebar }, data () { return { allArticle: "", dataList: [], pageModel: { url: 'https://cnodejs.org/api/v1/topics', menu: [5, 10, 20] }, } }, computed: { tabelEmpty: function () { if (this.dataList) { return false; } else { return true; } } }, events: { refresh: function (e) { this.dataList = e; } } }</script><style> body, table { font-size: 12px; } table { table-layout: fixed; empty-cells: show; border-collapse: collapse; width: 100%; margin: 10px 0; } td { height: 30px; } div.row { margin-left: 15px; margin-right: 15px; } h1, h2, h3 { font-size: 12px; margin: 0; padding: 0; } .table { border: 1px solid #ddd; background: #fff; } .table thead tr { background: #eee; } .table th { background-repeat: repeat-x; height: 30px; text-align: left; vertical-align: middle; } .table tr.empty { text-align: center; } .table td, .table th { border: 1px solid #ddd; padding: 0 1em 0; } .table tr:nth-child(odd) td { background-color: #f5f5f5; }</style>

本文已被整理到了《Vue.js前端組件學習教程》,歡迎大家學習閱讀。

關于vue.js組件的教程,請大家點擊專題vue.js組件學習教程進行學習。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美孕妇性xx| 欧美色欧美亚洲高清在线视频| 69影院欧美专区视频| 午夜精品国产精品大乳美女| 亚洲精品一区av在线播放| 欧美一级片在线播放| 国产中文欧美精品| 91久久久国产精品| 成人免费福利视频| 少妇久久久久久| 少妇激情综合网| 91免费精品国偷自产在线| 欧美与欧洲交xxxx免费观看| 色av中文字幕一区| 日韩成人在线免费观看| 欧美精品免费在线| 久久夜色撩人精品| 亚洲欧美激情一区| 国产在线观看不卡| 欧美日韩综合视频网址| 欧美中文字幕在线观看| 国产精品久久久| 精品亚洲一区二区三区四区五区| 欧美小视频在线| 91久久精品国产91久久性色| 91免费看国产| 久久久精品亚洲| 亚洲激情自拍图| 日韩经典中文字幕在线观看| 91av在线播放视频| 久久免费国产视频| 欧美性xxxx| 成人福利网站在线观看11| 中文字幕免费精品一区高清| 日韩在线中文字幕| 日韩精品极品视频| 91美女片黄在线观看游戏| 日韩经典第一页| 91亚洲精品久久久久久久久久久久| 亚洲精品福利视频| 欧美激情一区二区三区成人| 午夜精品一区二区三区av| 亚洲欧洲日韩国产| 2020欧美日韩在线视频| 国产精品久久久久久久久久尿| 国产精品激情av在线播放| 欧美国产日韩xxxxx| 欧美福利在线观看| 98精品国产高清在线xxxx天堂| 亚州欧美日韩中文视频| 91久久久久久久一区二区| 成人动漫网站在线观看| 国产成人福利夜色影视| 亚洲成人av中文字幕| 亚洲图片欧洲图片av| 国产精品久久国产精品99gif| 永久免费毛片在线播放不卡| 精品视频久久久久久久| 久久亚洲一区二区三区四区五区高| 久久精品成人欧美大片古装| 亚洲国产精品电影在线观看| 国产精品香蕉国产| 亚洲丝袜av一区| 伊是香蕉大人久久| 日韩精品高清在线| 成人国内精品久久久久一区| 91在线视频精品| 日韩在线免费av| 日韩中文字幕av| 在线播放国产一区中文字幕剧情欧美| 亚洲色图在线观看| 国产精品免费久久久久影院| 欧美亚洲国产视频小说| 久久久精品一区二区三区| 久久久久久久久久久91| 91九色精品视频| 亚洲精品久久久久久久久久久久| 久久精品国产亚洲| 91亚洲国产成人精品性色| 久久视频在线视频| 中文字幕亚洲综合久久| 中文字幕欧美日韩精品| 久久久999精品视频| 91在线观看免费高清| 日韩精品亚洲元码| 97国产真实伦对白精彩视频8| 狠狠色狠狠色综合日日五| 欧美黑人极品猛少妇色xxxxx| 亚洲成人精品在线| 国产精品影片在线观看| 97人洗澡人人免费公开视频碰碰碰| 亚洲精品国产美女| 亚洲成成品网站| 国产精品热视频| 91精品国产自产91精品| 国产成人黄色av| 日韩欧美在线中文字幕| 国产suv精品一区二区| 亚洲美女黄色片| 久久天天躁狠狠躁夜夜av| 97久久精品人搡人人玩| 国产精品亚洲视频在线观看| 亚洲日本aⅴ片在线观看香蕉| 在线亚洲国产精品网| 欧美日韩福利在线观看| 国产精品久久久久av免费| 国产美女精品视频免费观看| 国产v综合ⅴ日韩v欧美大片| 国产亚洲一区二区精品| 成人高清视频观看www| 欧美日韩在线免费观看| 亚洲a在线观看| 欧美日韩国产中文精品字幕自在自线| 97在线看免费观看视频在线观看| 亚洲综合色激情五月| 亚洲女人被黑人巨大进入| 97久久久免费福利网址| 在线视频欧美日韩| 欧美xxxx做受欧美| 色婷婷久久av| 日韩欧美在线看| 欧美一级片免费在线| 91国产中文字幕| 亚洲午夜精品久久久久久性色| 国产精品视频一区国模私拍| 亚洲欧美中文在线视频| 欧美激情第99页| 日韩福利伦理影院免费| 欧美巨猛xxxx猛交黑人97人| 亚洲黄色片网站| 久久综合网hezyo| 亚洲人午夜精品免费| 欧美俄罗斯性视频| 国产欧美精品一区二区| 欧美日本啪啪无遮挡网站| 91亚洲国产成人久久精品网站| 欧美成人免费一级人片100| 日韩电影在线观看永久视频免费网站| 日韩av手机在线| 欧美性受xxxx白人性爽| 美日韩精品免费观看视频| 亚洲男人天天操| 色久欧美在线视频观看| 国产精品最新在线观看| 国产成人高清激情视频在线观看| 亚洲春色另类小说| 久久综合国产精品台湾中文娱乐网| 亚洲资源在线看| 91wwwcom在线观看| 亚洲伦理中文字幕| 91精品久久久久久久久中文字幕| 久久久久北条麻妃免费看| 久久精品福利视频| 亚洲网站在线播放| 日本人成精品视频在线| 亚洲免费视频一区二区| 日本高清视频精品| 一本一本久久a久久精品牛牛影视| 日韩三级影视基地| 欧美一区二粉嫩精品国产一线天| 国产精品视频网| 色悠悠久久88| 亚洲人成在线观| 91产国在线观看动作片喷水|