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打造支持汉字,拼音,英文快速定位查询的超级select插件
Jun 18 Javascript
input 和 textarea 输入框最大文字限制的jquery插件
Oct 27 Javascript
jquery插件实现鼠标经过图片右侧显示大图的效果(类似淘宝)
Feb 04 Javascript
JQuery判断HTML元素是否存在的两种解决方法
Dec 26 Javascript
上传图片js判断图片尺寸和格式兼容IE
Sep 01 Javascript
jquery ajax请求方式与提示用户正在处理请稍等
Sep 01 Javascript
纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示
Sep 12 Javascript
详解js的六大数据类型
Dec 27 Javascript
基于HTML5+JS实现本地图片裁剪并上传功能
Mar 24 Javascript
JavaScript继承定义与用法实践分析
May 28 Javascript
vue+Element实现搜索关键字高亮功能
May 28 Javascript
Node与Python 双向通信的实现代码
Jul 16 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
destoon实现首页显示供应、企业、资讯条数的方法
2014/07/15 PHP
使用ob系列函数实现PHP网站页面静态化
2014/08/13 PHP
php实现递归抓取网页类实例
2015/04/03 PHP
教你识别简单的免查杀PHP后门
2015/09/13 PHP
PHP符合PSR编程规范的实例分享
2016/12/21 PHP
在视频前插入广告
2006/11/20 Javascript
使用AOP改善javascript代码
2015/05/01 Javascript
jQuery实现径向动画菜单效果
2015/07/17 Javascript
javascript将DOM节点添加到文档的方法实例分析
2015/08/04 Javascript
jQuery Validate验证框架经典大全
2015/09/23 Javascript
浅谈Sublime Text 3运行JavaScript控制台
2016/06/06 Javascript
基于jQuery实现页面搜索功能
2020/03/26 Javascript
使用jQuery调用XML实现无刷新即时聊天
2016/08/07 Javascript
seajs学习之模块的依赖加载及模块API的导出
2016/10/20 Javascript
AngularJS过滤器filter用法实例分析
2016/11/04 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
2017/02/12 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
jQuery 开发之EasyUI 添加数据的实例
2017/09/26 jQuery
ActiveX控件的使用-js实现打印超市小票功能代码详解
2017/11/22 Javascript
小程序实现多选框功能
2018/10/30 Javascript
jQuery实现的鼠标拖动浮层功能示例【拖动div等任何标签】
2018/12/29 jQuery
js面向对象之实现淘宝放大镜
2020/01/15 Javascript
Vue列表循环从指定下标开始的多种解决方案
2020/04/08 Javascript
浅谈Vue static 静态资源路径 和 style问题
2020/11/07 Javascript
[16:56]heroes英雄教学 司夜刺客
2014/09/18 DOTA
python实现折半查找和归并排序算法
2017/04/14 Python
Python实现的基于优先等级分配糖果问题算法示例
2018/04/25 Python
pandas 将索引值相加的方法
2018/11/15 Python
Python如何使用paramiko模块连接linux
2020/03/18 Python
美国复古街头服饰精品店:Need Supply Co.
2017/02/22 全球购物
松本清官方海外旗舰店:日本最大的药妆连锁店
2017/11/21 全球购物
美国最大点评网站:Yelp
2018/02/14 全球购物
GE设备配件:GE Appliance Parts(家电零件、配件和滤水器)
2018/11/28 全球购物
读书心得体会
2013/12/28 职场文书
出生证明公证书
2014/04/09 职场文书
搞笑车尾标语
2014/06/23 职场文书