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 相关文章推荐
经典的带阴影的可拖动的浮动层
Jun 26 Javascript
javascript 选择文件夹对话框(web)
Jul 07 Javascript
jQuery Dialog 弹出层对话框插件
Aug 09 Javascript
Jquery知识点三 jquery表单对象操作
Jan 17 Javascript
Extjs4实现两个GridPanel之间数据拖拽功能具体方法
Nov 21 Javascript
jQuery实现图片左右滚动特效
Apr 20 Javascript
JavaScript对象创建模式实例汇总
Oct 03 Javascript
Bootstrap路径导航与分页学习使用
Feb 08 Javascript
node.js文件上传重命名以及移动位置的示例代码
Jan 19 Javascript
vue组件与复用详解
Apr 08 Javascript
关于微信小程序获取小程序码并接受buffer流保存为图片的方法
Jun 07 Javascript
对layui数据表格动态cols(字段)动态变化详解
Oct 25 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的array_diff()函数在处理大数组时的效率问题
2011/11/27 PHP
PHP根据IP地址获取所在城市具体实现
2013/11/27 PHP
PHP易混淆函数的区别及用法汇总
2014/11/22 PHP
PHP 反射(Reflection)使用实例
2015/05/12 PHP
javascript下arguments,caller,callee,call,apply示例及理解
2009/12/24 Javascript
Juqery Html(),append()等方法的Bug解决方法
2010/12/13 Javascript
基于jquery实现控制经纬度显示地图与卫星
2013/05/20 Javascript
深入理解JavaScript系列(43):设计模式之状态模式详解
2015/03/04 Javascript
jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)
2015/10/28 Javascript
浅谈angular懒加载的一些坑
2016/08/20 Javascript
js style.display=block显示布局错乱问题的解决方法
2016/09/21 Javascript
微信小程序 icon组件详细及实例代码
2016/10/25 Javascript
js中Number数字数值运算后值不对的解决方法
2017/02/28 Javascript
完美解决axios在ie下的兼容性问题
2018/03/05 Javascript
Vue动态获取width的方法
2018/08/22 Javascript
nuxt.js写项目时增加错误提示页面操作
2020/11/05 Javascript
[01:05]DOTA2完美大师赛趣味视频之选手教你打职业
2017/11/23 DOTA
Python中常用信号signal类型实例
2018/01/25 Python
python MySQLdb使用教程详解
2018/03/20 Python
python编写暴力破解zip文档程序的实例讲解
2018/04/24 Python
numpy.ndarray 交换多维数组(矩阵)的行/列方法
2018/08/02 Python
Python3爬虫带上cookie的实例代码
2020/07/28 Python
python中Django文件上传方法详解
2020/08/05 Python
HTML5边玩边学(1)画布实现方法
2010/09/21 HTML / CSS
倩碧英国官网:Clinique英国
2018/08/10 全球购物
牧马人澳大利亚官网:Wrangler澳大利亚
2019/10/08 全球购物
某科技软件测试面试题
2013/05/19 面试题
什么是servlet链?
2014/07/13 面试题
Delphi软件工程师试题
2013/01/29 面试题
俄语翻译实习生的自我评价分享
2013/11/06 职场文书
数控技术专科生自我评价
2014/01/08 职场文书
党员四风自我剖析材料思想汇报
2014/09/13 职场文书
2014年公务员工作总结
2014/11/18 职场文书
2014年评职称工作总结
2014/11/20 职场文书
校运会广播稿
2015/08/19 职场文书
一篇文章带你深入了解Mysql触发器
2021/08/02 MySQL