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 相关文章推荐
js对象的比较
Feb 26 Javascript
jquery点击页面任何区域实现鼠标焦点十字效果
Jun 21 Javascript
jquery获取元素值的方法(常见的表单元素)
Nov 15 Javascript
jQuery中操控hidden、disable等无值属性的方法
Jan 06 Javascript
JavaScript使用DeviceOne开发实战(三)仿微信应用
Dec 02 Javascript
JS写XSS cookie stealer来窃取密码的步骤详解
Nov 20 Javascript
Webpack框架核心概念(知识点整理)
Dec 22 Javascript
axios全局请求参数设置,请求及返回拦截器的方法
Mar 05 Javascript
vue axios请求拦截实例代码
Mar 29 Javascript
用ES6的class模仿Vue写一个双向绑定的示例代码
Apr 20 Javascript
vue基础之v-bind属性、class和style用法分析
Mar 11 Javascript
jQuery+ajax实现批量删除功能完整示例
Jun 06 jQuery
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
ThinkPHP3.2.2的插件控制器功能
2015/03/05 PHP
php无限分类使用concat如何实现
2015/11/05 PHP
搭建自己的PHP MVC框架详解
2017/08/16 PHP
php实现微信发红包功能
2018/07/13 PHP
解决php扩展安装不生效问题
2019/10/25 PHP
JavaScript 封装Ajax传递的数据代码
2009/06/05 Javascript
基于jquery循环map功能的代码
2011/02/26 Javascript
Script标签与访问HTML页面详解
2014/01/10 Javascript
js代码验证手机号码和电话号码是否合法
2015/07/30 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
2016/10/15 Javascript
详解vue嵌套路由-query传递参数
2017/05/23 Javascript
vue.js的手脚架vue-cli项目搭建的步骤
2017/08/30 Javascript
Vue用mixin合并重复代码的实现
2020/11/27 Vue.js
深入了解Vue动态组件和异步组件
2021/01/26 Vue.js
[01:01:35]Optic vs paiN 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
使用Python设置tmpfs来加速项目的教程
2015/04/17 Python
Python 探针的实现原理
2016/04/23 Python
python批量制作雷达图的实现方法
2016/07/26 Python
浅谈五大Python Web框架
2017/03/20 Python
Windows系统Python直接调用C++ DLL的方法
2019/08/01 Python
python中的反斜杠问题深入讲解
2019/08/12 Python
python并发编程多进程 互斥锁原理解析
2019/08/20 Python
什么是Python变量作用域
2020/06/03 Python
Python读写锁实现实现代码解析
2020/11/28 Python
IE8下CSS3选择器nth-child() 不兼容问题的解决方法
2016/11/16 HTML / CSS
大学生创业项目方案
2014/03/08 职场文书
优秀电子工程系毕业生求职信
2014/05/24 职场文书
法定代表人授权委托书范文
2014/08/02 职场文书
中国梦演讲稿范文
2014/08/28 职场文书
干部考察材料范文
2014/12/24 职场文书
领导干部失职检讨书
2015/05/05 职场文书
2019同学聚会主持词
2019/05/06 职场文书
python如何利用cv2模块读取显示保存图片
2021/06/04 Python
mysql中int(3)和int(10)的数值范围是否相同
2021/10/16 MySQL
redis 解决库存并发问题实现数量控制
2022/04/08 Redis
Golang jwt身份认证
2022/04/20 Golang