vue2.0實(shí)現(xiàn)分頁(yè)組件的實(shí)例代碼
最近使用vue2.0重構(gòu)項(xiàng)目, 需要實(shí)現(xiàn)一個(gè)分頁(yè)的表格, 沒(méi)有找到合適的分頁(yè)組件, 就自己寫了一個(gè), 效果如下:
該項(xiàng)目是使用 vue-cli搭建的, 如果你的項(xiàng)目中沒(méi)有使用webpack,請(qǐng)根據(jù)代碼自己調(diào)整:
首先新建pagination.vue文件, 所有組件的代碼都寫在這里, 寫這樣的組件并沒(méi)有什么太大的難度, 主要是解決父子組件之間值傳遞的問(wèn)題
<template> <nav> <ul class="pagination"> <li :class="{'disabled': current == 1}"><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click="setCurrent(current - 1)"> « </a></li> <li :class="{'disabled': current == 1}"><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click="setCurrent(1)"> 首頁(yè) </a></li> <li v-for="p in grouplist" :class="{'active': current == p.val}"><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click="setCurrent(p.val)"> {{ p.text }} </a> </li> <li :class="{'disabled': current == page}"><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click="setCurrent(page)"> 尾頁(yè) </a></li> <li :class="{'disabled': current == page}"><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" @click="setCurrent(current + 1)"> »</a></li> </ul> </nav> </template> <script type="es6"> export default{ data(){ return { current: this.currentPage } }, props: { total: {// 數(shù)據(jù)總條數(shù) type: Number, default: 0 }, display: {// 每頁(yè)顯示條數(shù) type: Number, default: 10 }, currentPage: {// 當(dāng)前頁(yè)碼 type: Number, default: 1 }, pagegroup: {// 分頁(yè)條數(shù) type: Number, default: 5, coerce: function (v) { v = v > 0 ? v : 5; return v % 2 === 1 ? v : v + 1; } } }, computed: { page: function () { // 總頁(yè)數(shù) return Math.ceil(this.total / this.display); }, grouplist: function () { // 獲取分頁(yè)頁(yè)碼 var len = this.page, temp = [], list = [], count = Math.floor(this.pagegroup / 2), center = this.current; if (len <= this.pagegroup) { while (len--) { temp.push({text: this.page - len, val: this.page - len}); } ; return temp; } while (len--) { temp.push(this.page - len); } ; var idx = temp.indexOf(center); (idx < count) && ( center = center + count - idx); (this.current > this.page - count) && ( center = this.page - count); temp = temp.splice(center - count - 1, this.pagegroup); do { var t = temp.shift(); list.push({ text: t, val: t }); } while (temp.length); if (this.page > this.pagegroup) { (this.current > count + 1) && list.unshift({text: '...', val: list[0].val - 1}); (this.current < this.page - count) && list.push({text: '...', val: list[list.length - 1].val + 1}); } return list; } }, methods: { setCurrent: function (idx) { if (this.current != idx && idx > 0 && idx < this.page + 1) { this.current = idx; this.$emit('pagechange', this.current); } } } } </script> <style lang="less"> .pagination { overflow: hidden; display: table; margin: 0 auto; /*width: 100%;*/ height: 50px; li { float: left; height: 30px; border-radius: 5px; margin: 3px; color: #666; & :hover { background: #000; a { color: #fff; } } a { display: block; width: 30px; height: 30px; text-align: center; line-height: 30px; font-size: 12px; border-radius: 5px; text-decoration: none } } .active { background: #000; a { color: #fff; } } } </style>
使用時(shí), 在父組件中引入, 代碼如下:
<template>
<v-pagination :total="total" :current-page='current' @pagechange="pagechange"></v-pagination>
</template>
<script type="es6">
import pagination from '@/components/common/pagination/pagination'
export default{
data(){
return {
total: 150, // 記錄總條數(shù)
display: 10, // 每頁(yè)顯示條數(shù)
current: 1, // 當(dāng)前的頁(yè)數(shù)
},
methods: {
pagechange:function(currentPage){
console.log(currentPage);
// ajax請(qǐng)求, 向后臺(tái)發(fā)送 currentPage, 來(lái)獲取對(duì)應(yīng)的數(shù)據(jù)
}
},
components: {
'v-pagination': pagination,
}
}
</script>
至此, 一個(gè)基于 vue2.0 的分頁(yè)組件就完成了
- 基于Vue.js的表格分頁(yè)組件
- vue分頁(yè)組件table-pagebar使用實(shí)例解析
- 基于Vue如何封裝分頁(yè)組件
- 使用vue.js制作分頁(yè)組件
- 基于vue2的table分頁(yè)組件實(shí)現(xiàn)方法
- 基于vue實(shí)現(xiàn)swipe分頁(yè)組件實(shí)例
- vuejs2.0實(shí)現(xiàn)分頁(yè)組件使用$emit進(jìn)行事件監(jiān)聽(tīng)數(shù)據(jù)傳遞的方法
- VUE實(shí)現(xiàn)一個(gè)分頁(yè)組件的示例
- vue 基于element-ui 分頁(yè)組件封裝的實(shí)例代碼
- Vue開(kāi)發(fā)之封裝分頁(yè)組件與使用示例
相關(guān)文章
Vue props實(shí)現(xiàn)父組件給子組件傳遞數(shù)據(jù)的方式
Vue中的配置項(xiàng)Props能讓組件接收外部傳遞過(guò)來(lái)的數(shù)據(jù),本文給大家介紹了Vue props實(shí)現(xiàn)父組件給子組件傳遞數(shù)據(jù)的幾種方式,文中有詳細(xì)的實(shí)現(xiàn)方式,具有一定的參考價(jià)值,需要的朋友可以參考下2023-10-10從vue基礎(chǔ)開(kāi)始創(chuàng)建一個(gè)簡(jiǎn)單的增刪改查的實(shí)例代碼(推薦)
這篇文章主要介紹了從vue基礎(chǔ)開(kāi)始創(chuàng)建一個(gè)簡(jiǎn)單的增刪改查的實(shí)例代碼,需要的朋友參考下2018-02-02利用vue和element-ui設(shè)置表格內(nèi)容分頁(yè)的實(shí)例
下面小編就為大家分享一篇利用vue和element-ui設(shè)置表格內(nèi)容分頁(yè)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03幾個(gè)你不知道的技巧助你寫出更優(yōu)雅的vue.js代碼
本文參考自油管上某個(gè)國(guó)外大神的公開(kāi)演講視頻,學(xué)習(xí)了一下覺(jué)得很不錯(cuò),所以在項(xiàng)目中也使用了這些不錯(cuò)的技巧。趁周末有空,寫個(gè)博客記錄一下2018-06-06使用Vue 實(shí)現(xiàn)滑動(dòng)驗(yàn)證碼功能
本文章主要來(lái)介紹一下第一個(gè)階段,也就是前端校驗(yàn)的驗(yàn)證碼的實(shí)現(xiàn),下面來(lái)介紹一下拖動(dòng)驗(yàn)證碼的具體實(shí)現(xiàn)。這篇文章主要介紹了利用 Vue 實(shí)現(xiàn)滑動(dòng)驗(yàn)證碼,需要的朋友可以參考下2019-06-06vue-mugen-scroll組件實(shí)現(xiàn)pc端滾動(dòng)刷新
這篇文章主要為大家詳細(xì)介紹了vue-mugen-scroll組件實(shí)現(xiàn)pc端滾動(dòng)刷新,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08基于Vue3實(shí)現(xiàn)列表虛擬滾動(dòng)效果
這篇文章主要為大家介紹了如何利用Vue3實(shí)現(xiàn)列表虛擬滾動(dòng)效果,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定價(jià)值,需要的可以參考一下2022-04-04結(jié)合Vue控制字符和字節(jié)的顯示個(gè)數(shù)的示例
這篇文章主要介紹了結(jié)合Vue控制字符和字節(jié)的顯示個(gè)數(shù)的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05