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 相关文章推荐
firefox中用javascript实现鼠标位置的定位
Jun 17 Javascript
javascript xml为数据源的下拉框控件
Jul 07 Javascript
分析Node.js connect ECONNREFUSED错误
Apr 09 Javascript
js实现带搜索功能的下拉框实时搜索实时匹配
Nov 05 Javascript
JavaScript中变量声明有var和没var的区别示例介绍
Sep 15 Javascript
基于insertBefore制作简单的循环插空效果
Sep 21 Javascript
JavaScript字符串删除重复字符的方法
Dec 25 Javascript
JavaScript简单实现弹出拖拽窗口(二)
Jun 17 Javascript
JavaScript的事件机制详解
Jan 17 Javascript
Vue + Webpack + Vue-loader学习教程之相关配置篇
Mar 14 Javascript
Vue2.0用 watch 观察 prop 变化(不触发)
Sep 08 Javascript
利用vue+elementUI实现部分引入组件的方法详解
Nov 22 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 图像函数大举例(非原创)
2009/06/20 PHP
vs中通过剪切板循环来循环粘贴不同内容
2011/04/30 PHP
php调用Google translate_tts api实现代码
2013/08/07 PHP
PHP json_encode中文乱码问题的解决办法
2013/09/09 PHP
php实现的Timer页面运行时间监测类
2014/09/24 PHP
PHP实现可添加水印与生成缩略图的图片处理工具类
2018/01/16 PHP
javascript获得CheckBoxList选中的数量
2009/10/27 Javascript
JavaScript代码编写中各种各样的坑和填坑方法
2014/06/06 Javascript
js获取本机操作系统类型的两种方法
2015/12/19 Javascript
全面了解函数声明与函数表达式、变量提升
2016/08/09 Javascript
JSONP和批量操作功能的实现方法
2016/08/21 Javascript
基于angularjs实现图片放大镜效果
2016/08/31 Javascript
微信小程序之数据双向绑定与数据操作
2017/05/12 Javascript
js中的事件委托或是事件代理使用详解
2017/06/23 Javascript
从零开始搭建webpack+react开发环境的详细步骤
2018/05/18 Javascript
VUE-Table上绑定Input通过render实现双向绑定数据的示例
2018/08/27 Javascript
微信小程序动态增加按钮组件
2018/09/14 Javascript
Vue源码探究之状态初始化
2018/11/14 Javascript
利用Vue实现一个markdown编辑器实例代码
2019/05/19 Javascript
layui的布局和表格的渲染以及动态生成表格的方法
2019/09/18 Javascript
Vue.set 全局操作简单示例
2019/09/19 Javascript
JavaScript缓动动画函数的封装方法
2020/11/25 Javascript
[05:10]2014DOTA2国际邀请赛 通往胜利之匙赛场探秘之旅
2014/07/18 DOTA
Python使用MD5加密算法对字符串进行加密操作示例
2018/03/30 Python
python读取视频流提取视频帧的两种方法
2020/10/22 Python
让Django支持Sql Server作后端数据库的方法
2018/05/29 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
2019/10/21 Python
Django实现将views.py中的数据传递到前端html页面,并展示
2020/03/16 Python
澳大利亚和新西兰最大的在线旅行社之一:Aunt Betty
2019/08/07 全球购物
个人求职简历的自我评价
2013/10/19 职场文书
保密承诺书范文
2014/03/27 职场文书
开工仪式策划方案
2014/05/23 职场文书
民族团结先进个人事迹材料
2014/06/02 职场文书
党的群众路线教育实践活动总结
2014/10/30 职场文书
工程技术员岗位职责
2015/04/11 职场文书
《宝可梦》动画制作25周年到来 官方发布特别纪念视频
2022/04/01 日漫