Vue.js分页组件实现:diVuePagination的使用详解(9)
我们现在在pageHome.vue做了使用,这个模拟数据包含7页,我们在另外两个组件也使用分页组件,测试小于5页和只有1页的效果:
<divue-page v-bind:currentpage="currentpage" v-bind:allpage="allpage" v-on:getajaxlist="getajaxlist"></divue-page>
直接粘贴就可以在另外的组件使用。
只有1页:
小于5页:
测试没有太大问题!
七.优化和改进建议
当然不是样式的优化,这个需要设计的参与,我们还是显示的优化和改进,比如:
我们是不是该有一个...
还有就是...
可以参考别的分页效果,然后你可以不断的改进!
八.完整代码
main.js:
import Vue from 'vue' import App from './App.vue' import VueRouter from 'vue-router' import pageHome from './pageHome.vue' import pageNews from './pageNews.vue' import pageInfo from './pageInfo.vue' //注册组件 import divuePage from './divuePage.vue' Vue.component('divue-page', divuePage) //路由配置 Vue.use(VueRouter); var routes = [ { path: '/', component: pageHome}, { path: '/pageNews', component: pageNews}, { path: '/pageInfo', component: pageInfo} ] var router = new VueRouter({ routes: routes // (缩写)相当于 routes: routes }) new Vue({ el: '#app', router, render: h => h(App) })
App.vue:
<template> <div id="app"> <h3>{{msg}}</h3> <ul> <li><router-link to="/">pageHome</router-link></li> <li><router-link to="/pageNews">pageNews</router-link></li> <li><router-link to="/pageInfo">pageInfo</router-link></li> </ul> <div> <router-view></router-view> </div> </div> </template> <script> export default { name: 'app', data () { return { msg: '分页组件:DiVuePage ' } } } </script> <style> #app { font-family: 'Avenir', Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px; } </style>
divuePage.vue:
<template> <div class="DiReactPage"> <div class="DiReactPage-btn" v-on:click="clickFirst">第一页</div> <div class="DiReactPage-btn" v-on:click="clickPrev" v-bind:class="{disable:currentpage==1}">上一页</div> <div class="DiReactPage-page"> <span v-for="(item,index) in pages" v-bind:class="{active:currentpage==item}" v-on:click="clickCurrent(item)">{{item}}</span> </div> <div class="DiReactPage-btn" v-on:click="clickNext" v-bind:class="{disable:currentpage==allpage}">下一页</div> <div class="DiReactPage-btn" v-on:click="clickLast">最后一页</div> <div class="DiReactPage-btn">总{{allpage}}页</div> <input class="DiReactPage-input" type="text" v-model="skipvalue" /> <button class="DiReactPage-btn" v-on:click="clickSkip">跳转</button> </div> </template> <script> export default { name: 'divuePage', computed:{ pages:function(){ var arr=[]; if(this.allpage>5){ if(this.currentpage+5>this.allpage){ for(var i=this.currentpage;i<=this.allpage;i++){ arr.push(i); }; }else{ for(var i=this.currentpage;i<this.currentpage+5;i++){ arr.push(i); }; }; }else{ for(var i=1;i<=this.allpage;i++){ arr.push(i); }; } return arr; } }, data:function(){ return { skipvalue:"" } }, props:["currentpage","allpage"], methods:{ clickFirst:function(){//点击第一页 this.$emit("getajaxlist",1); }, clickCurrent:function(item){ this.$emit("getajaxlist",item); }, clickLast:function(){//点击最后一页 this.$emit("getajaxlist",this.allpage); }, clickPrev:function(){//点击上一页 if(this.currentpage-1<1){ return false; } this.$emit("getajaxlist",this.currentpage-1); }, clickNext:function(){//点击下一页 if(this.currentpage+1>this.allpage){ return false; } this.$emit("getajaxlist",this.currentpage+1); }, clickSkip:function(){//点击下一页 if(isNaN(this.skipvalue)){ console.log("必须是数字") return false; } if(this.skipvalue<1 || this.skipvalue>this.allpage){ console.log("超过范围") return false; } this.$emit("getajaxlist",this.skipvalue); } } } </script> <style> .DiReactPage{ height:30px; line-height:30px; text-align:center;} .DiReactPage .DiReactPage-btn{ display:inline-block; height:30px; line-height:30px; padding:0 5px; margin:0 5px; border-radius:4px; background:#09F; cursor:pointer;} .DiReactPage .DiReactPage-btn.disable{ background:#999;cursor:not-allowed;} .DiReactPage .DiReactPage-page{ display:inline-block; height:30px; line-height:30px; margin:0 20px;} .DiReactPage .DiReactPage-page span{display:inline-block; height:30px; line-height:30px; padding:0 5px; margin:0 5px; color:#000; cursor:pointer;} .DiReactPage .DiReactPage-page span.active{ color:#09F; } .DiReactPage .iReactPage-input{ width:100px; border:1px solid #666; border-radius:4px;height:30px; line-height:30px; } </style>
内容版权声明:除非注明,否则皆为本站原创文章。