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 相关文章推荐
微博@符号的用户名提示效果。(想@到谁?)
Nov 05 Javascript
Javascript中的String对象详谈
Mar 03 Javascript
PHP 数组current和next用法分享
Mar 05 Javascript
Js实现自定义右键行为
Mar 26 Javascript
JavaScript简单获取页面图片原始尺寸的方法
Jun 21 Javascript
jQuery checkbox选中问题之prop与attr注意点分析
Nov 15 Javascript
canvas的神奇用法
Feb 03 Javascript
Jquery EasyUI $.Parser
Jun 02 jQuery
解析Angular 2+ 样式绑定方式
Jan 15 Javascript
在Vue项目中引入腾讯验证码服务的教程
Apr 03 Javascript
解决修复npm安装全局模块权限的问题
May 17 Javascript
vue input输入框关键字筛选检索列表数据展示
Oct 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 curl 获取响应的状态码的方法
2014/01/13 PHP
PHP 登录完成后如何跳转上一访问页面
2014/01/14 PHP
Joomla使用Apache重写模式的方法
2016/05/04 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
2017/07/03 PHP
PHP基于面向对象实现的留言本功能实例
2018/04/04 PHP
纯js实现的论坛常用的运行代码的效果
2008/07/15 Javascript
JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
2014/10/17 Javascript
JavaScript中的继承方式详解
2015/02/11 Javascript
JavaScript实现拖拽网页内元素的方法
2015/04/15 Javascript
require.js的用法详解
2015/10/20 Javascript
jquery实现删除一个元素后面的所有元素功能
2015/12/21 Javascript
详解javascript跨浏览器事件处理程序
2016/03/27 Javascript
JS控制文本域只读或可写属性的方法
2016/06/24 Javascript
JavaScript生成图形验证码
2020/08/24 Javascript
vue.js 实现点击展开收起动画效果
2018/07/07 Javascript
Nodejs实现的操作MongoDB数据库功能完整示例
2019/02/02 NodeJs
解决layui-table单元格设置为百分比在ie8下不能自适应的问题
2019/09/28 Javascript
es6数组的flat(),flatMap()函数用法实例分析
2020/04/18 Javascript
[02:45]DOTA2英雄基础教程 伐木机
2013/12/23 DOTA
python实现通过shelve修改对象实例
2014/09/26 Python
python进程类subprocess的一些操作方法例子
2014/11/22 Python
利用matplotlib+numpy绘制多种绘图的方法实例
2017/05/03 Python
Pycharm以root权限运行脚本的方法
2019/01/19 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
2021/02/03 Python
CSS3中Transform动画属性用法详解
2016/07/04 HTML / CSS
CSS3提交意见输入框样式代码
2014/10/30 HTML / CSS
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
亚马逊墨西哥站:Amazon.com.mx
2018/08/26 全球购物
开学典礼感言
2014/02/16 职场文书
计算机专业职业规划
2014/02/28 职场文书
美容院营销方案
2014/03/05 职场文书
计算机网络工程专业职业生涯规划书
2014/03/10 职场文书
2014基层党员干部学习全国两会心得体会
2014/03/17 职场文书
考试作弊检讨书
2015/01/27 职场文书
领导干部失职检讨书
2015/05/05 职场文书
浅谈mysql哪些情况会导致索引失效
2021/11/20 MySQL