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 相关文章推荐
event.keyCode键码值表 附只能输入特定的字符串代码
May 15 Javascript
jquery 操作DOM的基本用法分享
Apr 05 Javascript
jQuery建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)
Feb 26 Javascript
js arguments,jcallee caller用法总结
Nov 30 Javascript
jQuery 滑动方法slideDown向下滑动元素
Jan 16 Javascript
javascript中scrollTop详解
Apr 13 Javascript
javascript基于DOM实现权限选择实例分析
May 14 Javascript
详解Node.js串行化流程控制
May 04 Javascript
jQuery实现碰到边缘反弹的动画效果
Feb 24 jQuery
Vue.js 通过jQuery ajax获取数据实现更新后重新渲染页面的方法
Aug 09 jQuery
Vue2.x通用条件搜索组件的封装及应用详解
May 28 Javascript
js找出5个数中最大的一个数和倒数第二大的数实现方法示例小结
Mar 04 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 什么是PEAR?(第三篇)
2009/03/19 PHP
在CentOS系统上从零开始搭建WordPress博客的全流程记录
2016/04/21 PHP
windows7配置Nginx+php+mysql的详细教程
2016/09/04 PHP
PHP中quotemeta()函数的用法讲解
2019/04/04 PHP
javascript一点特殊用法
2008/05/28 Javascript
extjs两个tbar问题探讨
2013/08/08 Javascript
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
jQuery中data()方法用法实例
2014/12/27 Javascript
2则自己编写的jQuery特效分享
2015/02/26 Javascript
JavaScript蒙板(model)功能的简单实现代码
2016/08/04 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
2016/09/26 Javascript
JavaScript实现自定义媒体播放器方法介绍
2017/01/03 Javascript
微信小程序开发之相册选择和拍照详解及实例代码
2017/02/22 Javascript
在Vue 中使用Typescript的示例代码
2018/09/10 Javascript
小程序实现列表删除功能
2018/10/30 Javascript
JQuery中queue方法用法示例
2019/01/31 jQuery
vue文件运行的方法教学
2019/02/12 Javascript
vue中组件的3种使用方式详解
2019/03/23 Javascript
8 个有用的JS技巧(推荐)
2019/07/03 Javascript
Angular进行简单单元测试的实现方法实例
2020/08/16 Javascript
[49:27]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第一场
2018/04/05 DOTA
跟老齐学Python之集合的关系
2014/09/24 Python
浅谈Python数据类型之间的转换
2016/06/08 Python
使用Kivy将python程序打包为apk文件
2017/07/29 Python
在Windows中设置Python环境变量的实例讲解
2018/04/28 Python
python实现简单颜色识别程序
2020/02/19 Python
Android Q之气泡弹窗的实现示例
2020/06/23 Python
Expedia加拿大官方网站:加拿大最大的在线旅游提供商
2017/12/31 全球购物
欧洲有机婴儿食品最大的市场:Organic Baby Food(供美国和加拿大)
2018/03/28 全球购物
新闻专业应届生求职信
2013/10/31 职场文书
高中毕业自我鉴定
2013/12/19 职场文书
人民教师求职自荐信
2014/03/12 职场文书
成语的广告词
2014/03/19 职场文书
活动总结怎么写
2014/04/28 职场文书
2014年教育工作总结
2014/11/26 职场文书
英文自荐信范文
2015/03/25 职场文书