Vue.js实现一个自定义分页组件vue-paginaiton


Posted in Javascript onSeptember 05, 2016

vue实现一个分页组件vue-paginaiton

vue使用了一段时间的感触就是,我再也不想直接操作DOM了。数据绑定式的编程体验真是好。实现的一个分页组件。

这里的css就不放出来了,可以看直接去github上下载:vue-pagination

先上一张实例图吧

Vue.js实现一个自定义分页组件vue-paginaiton

模版

<div class="page-bar">
 <ul>
 <li v-if="showFirstText"><a v-on:click="cur--">上一页</a></li>

 <li v-for = "index in pagenums">
 <a v-on:click="pageChange(index)">{{index}}</a>

 </li>

 <li v-if="showNextText"><a v-on:click="cur++">下一页</a></li>
 <li><a>共<i>{{all}}</i>页</a></li>
 </ul>

</div>

Vue.js实现一个自定义分页组件vue-paginaiton

在未引入js前,页面的显示,分析下,all字段简单直接输出即可,{{index}}是分页码这个需要一些动态的渲染。

var app = new Vue({
 el: '#app',
 data:{
 currentpage: 1,
 totlepage: 28,
 visiblepage:10,
 msg: ''
 },
})

调用 new Vue({参数}) 就是创建了一个基本的组件,赋值给变量 app.el就是element的缩写,定位模版的位置.data就是数据了.知道了总页数但是要显示页码还是要一番计算,所以显示页码就是计算属性了.所以我们要用computed

computed: {
 //计算属性:返回页码数组,这里会自动进行脏检查,不用$watch();
 pagenums: function(){
 //初始化前后页边界
 var lowPage = 1;
 var highPage = this.totlepage;
 var pageArr = [];
 if(this.totlepage > this.visiblepage){//总页数超过可见页数时,进一步处理;
 var subVisiblePage = Math.ceil(this.visiblepage/2);
 if(this.currentpage > subVisiblePage && this.currentpage < this.totlepage - subVisiblePage +1){//处理正常的分页
 lowPage = this.currentpage - subVisiblePage;
 highPage = this.currentpage + subVisiblePage -1;
 }else if(this.currentpage <= subVisiblePage){//处理前几页的逻辑
 lowPage = 1;
 highPage = this.visiblepage;
 }else{//处理后几页的逻辑
 lowPage = this.totlepage - this.visiblepage + 1;
 highPage = this.totlepage; 
 }
 }
 //确定了上下page边界后,要准备压入数组中了
 while(lowPage <= highPage){
 pageArr.push(lowPage);
 lowPage ++;
 }

 return pageArr;
 }
 },

观看html模版发现v-if指令.很明显当内容是true就输出,否就没。

重点看下

<li v-for="index in pagenums" v-bind:class="{ active: currentpage == index}">
 <a v-on:click="pageChange(index)">{{ index }}</a>
 </li>

v-for是循环渲染输出计算属性pagenums.每一次循环的子元素赋值给index v-bind:class绑定class,当渲染到目前的角标的时候加个class v-on:click是绑定了事件,我把index当参数传进入了,后面做判断,默认传event事件.
然后我们Vue的选项里面再增加methods字段

methods:{
 pageChange: function(page){
 if (this.currentpage != page) {
 this.currentpage = page;
 this.$dispatch('page-change', page); //父子组件间的通信:==>子组件通过$diapatch(),分发事件,父组件冒泡通过v-on:page-change监听到相应的事件;
 };
 }
 }

组件交互

组件写完了,问题来了,用户点击发生页面改变,你怎么通知其他组件作出相应的变化. 可以在页角发生改变的函数下,插一条语句通知其他组件。不过这种方法是很差的做法。可以使用

watch: {
 currentpage: function(oldValue , newValue){
 console.log(arguments)
 }
}

观察了currentpage数据当它改变的时候,可以获取前后值。然后通知其他组件。

完整的代码可以看 github:vue-pagination

本文已被整理到了《Vue.js前端组件学习教程》,欢迎大家学习阅读。

关于vue.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
一款jquery特效编写的大度宽屏焦点图切换特效的实例代码
Aug 05 Javascript
js获取url中指定参数值的示例代码
Dec 14 Javascript
jQuery中的ajax async同步和异步详解
Sep 29 Javascript
React实现点击删除列表中对应项
Jan 10 Javascript
详解Vue.js 2.0 如何使用axios
Apr 21 Javascript
在使用JSON格式处理数据时应该注意的问题小结
May 20 Javascript
Js利用console计算代码运行时间的方法示例
Sep 24 Javascript
Vue2.0父子组件传递函数的教程详解
Oct 16 Javascript
JavaScript链式调用实例浅析
Dec 19 Javascript
解决vue的过渡动画无法正常实现问题
Oct 31 Javascript
Vue中img的src是动态渲染时不显示的解决
Nov 14 Javascript
vue 页面回退mounted函数不执行的解决方案
Jul 26 Javascript
jquery层级选择器(匹配父元素下的子元素实现代码)
Sep 05 #Javascript
Vue.js每天必学之计算属性computed与$watch
Sep 05 #Javascript
jQuery实现的导航下拉菜单效果示例
Sep 05 #Javascript
jquery层级选择器的实现(匹配后代元素div)
Sep 05 #Javascript
Vue.js每天必学之数据双向绑定
Sep 05 #Javascript
JS快速实现移动端拼图游戏
Sep 05 #Javascript
jQuery实现的tab标签切换效果示例
Sep 05 #Javascript
You might like
PHP实现图片简单上传
2006/10/09 PHP
一个显示某段时间内每个月的方法 返回由这些月份组成的数组
2012/05/16 PHP
关于crontab的使用详解
2013/06/24 PHP
PHP提取字符串中的手机号正则表达式怎么写
2017/07/17 PHP
为何说PHP引用是个坑,要慎用
2018/04/02 PHP
两个select之间option的互相添加操作(jquery实现)
2009/11/12 Javascript
缓动函数requestAnimationFrame 更好的实现浏览器经动画
2012/12/07 Javascript
jQuery之自动完成组件的深入解析
2013/06/19 Javascript
jquery validation验证身份证号,护照,电话号码,email(实例代码)
2013/11/06 Javascript
jquery插件jTimer(jquery定时器)使用方法
2013/12/23 Javascript
JavaScript初学者建议:不要去管浏览器兼容
2014/02/04 Javascript
javascript实现博客园页面右下角返回顶部按钮
2015/02/22 Javascript
js格式化时间的方法
2015/12/18 Javascript
Nodejs express框架一个工程中同时使用ejs模版和jade模版
2015/12/28 NodeJs
详解JavaScript常量定义
2017/01/03 Javascript
JavaScript实现与web通信的方法详解
2020/08/07 Javascript
[00:53]TI3正赛第三天 DK怒破A队不败金身 现场国旗飘扬热血激昂
2013/08/10 DOTA
python基础教程之获取本机ip数据包示例
2014/02/10 Python
利用打码兔和超人打码自封装的打码类分享
2014/03/16 Python
Python3编程实现获取阿里云ECS实例及监控的方法
2017/08/18 Python
Python实现针对给定字符串寻找最长非重复子串的方法
2018/04/21 Python
解决django中ModelForm多表单组合的问题
2019/07/18 Python
python+openCV调用摄像头拍摄和处理图片的实现
2019/08/06 Python
python numpy之np.random的随机数函数使用介绍
2019/10/06 Python
matplotlib quiver箭图绘制案例
2020/04/17 Python
python使用for...else跳出双层嵌套循环的方法实例
2020/05/17 Python
Pycharm修改python路径过程图解
2020/05/22 Python
Python使用Selenium实现淘宝抢单的流程分析
2020/06/23 Python
AmazeUI中各种的导航式菜单与解决方法
2020/08/19 HTML / CSS
Ivory Isle Designs美国/加拿大:婚礼和活动文具公司
2018/08/21 全球购物
什么是Deployment descriptors;都有什么类型的部署描述符
2015/07/28 面试题
如何打造一封优秀的留学推荐信
2014/01/25 职场文书
创建省级文明单位实施方案
2014/02/27 职场文书
根叔历年演讲稿
2014/05/20 职场文书
中华美德颂演讲稿
2014/05/20 职场文书
2014财务部年度工作总结
2014/12/08 职场文书