vuejs2.0實(shí)現(xiàn)一個(gè)簡(jiǎn)單的分頁(yè)示例
最近幾個(gè)項(xiàng)目用上vue了項(xiàng)目又剛好需要一個(gè)分頁(yè)的功能。于是百度發(fā)現(xiàn)幾篇文章介紹的實(shí)在方式有點(diǎn)復(fù)雜,沒(méi)耐心看自己動(dòng)手寫(xiě)了一個(gè)。
用js實(shí)現(xiàn)的分頁(yè)結(jié)果如圖所示:
css
.page-bar{ margin:40px; } ul,li{ margin: 0px; padding: 0px; } li{ list-style: none } .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 a.banclick{ cursor:not-allowed; } .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; }
模版
<div class="page-bar"> <ul> <li v-if="cur>1"><a v-on:click="cur--,pageClick()">上一頁(yè)</a></li> <li v-if="cur==1"><a class="banclick">上一頁(yè)</a></li> <li v-for="index in indexs" v-bind:class="{ 'active': cur == index}"> <a v-on:click="btnClick(index)">{{ index }}</a> </li> <li v-if="cur!=all"><a v-on:click="cur++,pageClick()">下一頁(yè)</a></li> <li v-if="cur == all"><a class="banclick">下一頁(yè)</a></li> <li><a>共<i>{{all}}</i>頁(yè)</a></li> </ul> </div>
js
var pageBar = new Vue({ el: '.page-bar', data: { all: 20, //總頁(yè)數(shù) cur: 1,//當(dāng)前頁(yè)碼 });
調(diào)用 new Vue({參數(shù)}) 就是創(chuàng)建了一個(gè)基本的組件,賦值給變量 pageBar.
el就是element的縮寫(xiě),定位模版的位置.data就是數(shù)據(jù)了.
知道了總頁(yè)數(shù)但是要顯示頁(yè)碼還是要一番計(jì)算,所以顯示頁(yè)碼就是計(jì)算屬性了.
所以我們要用computed
computed: { indexs: function(){ var left = 1; var right = this.all; var ar = []; if(this.all>= 5){ if(this.cur > 3 && this.cur < this.all-2){ left = this.cur - 2 right = this.cur + 2 }else{ if(this.cur<=3){ left = 1 right = 5 }else{ right = this.all left = this.all -4 } } } while (left <= right){ ar.push(left) left ++ } return ar } }
看一下頁(yè)面顯示出來(lái)的循環(huán):
<li v-for="index in indexs" v-bind:class="{ 'active': cur == index}"> <a v-on:click="btnClick(index)">{{ index }}</a> </li>
v-for是循環(huán)渲染輸出計(jì)算屬性indexs.每一次循環(huán)的子元素賦值給index v-bind:class綁定class,當(dāng)渲染到目前的角標(biāo)的時(shí)候加個(gè)class v-on:click是綁定了事件,我把index當(dāng)參數(shù)傳進(jìn)入了,后面做判斷,默認(rèn)傳event事件.
然后我們給Vue的選項(xiàng)里面再增加methods字段
methods: { btnClick: function(data){//頁(yè)碼點(diǎn)擊事件 if(data != this.cur){ this.cur = data } }, pageClick: function(){ console.log('現(xiàn)在在'+this.cur+'頁(yè)'); } },
組件交互
組件寫(xiě)完了,問(wèn)題來(lái)了,用戶點(diǎn)擊發(fā)生頁(yè)面改變,你怎么通知其他組件作出相應(yīng)的變化. 可以在頁(yè)角發(fā)生改變的函數(shù)下,插一條語(yǔ)句通知其他組件。不過(guò)這種方法是很差的做法。可以使用
watch: { cur: function(oldValue , newValue){ console.log(arguments); } }
觀察了cur數(shù)據(jù)當(dāng)它改變的時(shí)候,可以獲取前后值。然后通知其他組件。
完整的代碼:
<!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/> <meta charset="utf-8"> <title></title> <meta name="keywords" content="" /> <meta name="description" content="" /> <script type="text/javascript" src="js/vue.min.js"></script> <style> .page-bar{ margin:40px; } ul,li{ margin: 0px; padding: 0px; } li{ list-style: none } .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 a.banclick{ cursor:not-allowed; } .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; } </style> </head> <body> <div class="page-bar"> <ul> <li v-if="cur>1"><a v-on:click="cur--,pageClick()">上一頁(yè)</a></li> <li v-if="cur==1"><a class="banclick">上一頁(yè)</a></li> <li v-for="index in indexs" v-bind:class="{ 'active': cur == index}"> <a v-on:click="btnClick(index)">{{ index }}</a> </li> <li v-if="cur!=all"><a v-on:click="cur++,pageClick()">下一頁(yè)</a></li> <li v-if="cur == all"><a class="banclick">下一頁(yè)</a></li> <li><a>共<i>{{all}}</i>頁(yè)</a></li> </ul> </div> <script type="text/javascript"> var pageBar = new Vue({ el: '.page-bar', data: { all: 8, //總頁(yè)數(shù) cur: 1//當(dāng)前頁(yè)碼 }, watch: { cur: function(oldValue , newValue){ console.log(arguments); } }, methods: { btnClick: function(data){//頁(yè)碼點(diǎn)擊事件 if(data != this.cur){ this.cur = data } }, pageClick: function(){ console.log('現(xiàn)在在'+this.cur+'頁(yè)'); } }, computed: { indexs: function(){ var left = 1; var right = this.all; var ar = []; if(this.all>= 5){ if(this.cur > 3 && this.cur < this.all-2){ left = this.cur - 2 right = this.cur + 2 }else{ if(this.cur<=3){ left = 1 right = 5 }else{ right = this.all left = this.all -4 } } } while (left <= right){ ar.push(left) left ++ } return ar } } }) </script> </body> </html>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Vue.js實(shí)現(xiàn)多條件篩選、搜索、排序及分頁(yè)的表格功能
- 利用vue + element實(shí)現(xiàn)表格分頁(yè)和前端搜索的方法
- Vue form 表單提交+ajax異步請(qǐng)求+分頁(yè)效果
- Vue+element-ui 實(shí)現(xiàn)表格的分頁(yè)功能示例
- Vue.js實(shí)現(xiàn)分頁(yè)查詢功能
- Vue2.5 結(jié)合 Element UI 之 Table 和 Pagination 組件實(shí)現(xiàn)分頁(yè)功能
- Vue.js實(shí)現(xiàn)無(wú)限加載與分頁(yè)功能開(kāi)發(fā)
- 用Vue寫(xiě)一個(gè)分頁(yè)器的示例代碼
- 基于Vue.js的表格分頁(yè)組件
- vue iview實(shí)現(xiàn)分頁(yè)功能
相關(guān)文章
淺析Vue3中通過(guò)v-model實(shí)現(xiàn)父子組件的雙向數(shù)據(jù)綁定及利用computed簡(jiǎn)化父子組件雙向綁定
這篇文章主要介紹了淺析Vue3中通過(guò)v-model實(shí)現(xiàn)父子組件的雙向數(shù)據(jù)綁定及利用computed簡(jiǎn)化父子組件雙向綁定,需要的朋友可以參考下2022-12-12關(guān)于antd-vue?a-menu菜單綁定路由的相關(guān)問(wèn)題
這篇文章主要介紹了關(guān)于antd-vue?a-menu菜單綁定路由的相關(guān)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10通過(guò)html文件來(lái)使用Vue的單文件組件形式詳解
這篇文章主要介紹了通過(guò)html文件來(lái)使用Vue的單文件組件形式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05vue如何使用html2canvas和JsPDF導(dǎo)出pdf組件
這篇文章主要介紹了vue如何使用html2canvas和JsPDF導(dǎo)出pdf組件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-09-09利用vue重構(gòu)有贊商城的思路以及總結(jié)整理
這篇文章主要介紹了利用vue重構(gòu)有贊商城的思路以及總結(jié)整理,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-02-02詳解vue通過(guò)NGINX部署在子目錄或者二級(jí)目錄實(shí)踐
這篇文章主要介紹了詳解vue通過(guò)NGINX部署在子目錄或者二級(jí)目錄實(shí)踐,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09如何用Vite構(gòu)建工具快速創(chuàng)建Vue項(xiàng)目
Vite是一個(gè)web開(kāi)發(fā)構(gòu)建工具,由于其原生?ES?模塊導(dǎo)入方法,它允許快速提供代碼,下面這篇文章主要給大家介紹了關(guān)于如何用Vite構(gòu)建工具快速創(chuàng)建Vue項(xiàng)目的相關(guān)資料,需要的朋友可以參考下2022-05-05Vue實(shí)現(xiàn)路由懶加載的多種方式總結(jié)
當(dāng)構(gòu)建的項(xiàng)目比較大的時(shí)候,懶加載可以分割代碼塊,提高頁(yè)面的初始加載效率解決白屏問(wèn)題,下面是幾種常見(jiàn)vue路由懶加載的方法,感興趣的朋友跟隨小編一起看看吧2023-11-11Vue和SpringBoot之間傳遞時(shí)間的方法實(shí)現(xiàn)
本文主要介紹了Vue和SpringBoot之間傳遞時(shí)間的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07