基于vue2.0的分页组件开发
今天安排的任务是写基于vue2.0的分页组件,好吧,我一开始是觉得超级简单的,但是越写越写不出来,写的最后乱七八糟的都不知道下句该写什么了,所以重新捋了思路,小结一下~
首先写组件需要考虑:
- 要从父组件传哪些必要的参数,即子组件需要提供什么接口
- 组件需要去实现哪些功能
- 我们要返回哪些参数给用户
针对这几点,做如下分析:
- 先上简单的模板:
<template lang="html">
<div class="page">
<ul>
<li><a v-on:click="prevClick()">上一页</a></li>
<li v-for="index in pages" v-bind:class="{ active: curPage == index}">
<a v-on:click="btnClick(index)">{{ index }}</a>
</li>
<li><a v-on:click="nextClick()">下一页</a></li>
<li><a>共<i>{{totalPages}}</i>页</a></li>
</ul>
</div>
</template> - 将父组件传来的数据我们存放在props里,而且我们需要在data里写一个curPage来对应props里的cur,你肯定要问why!!因为vue2.0中要求不能改变props里的值的大小,但是我们这里的cur表示当前选中的页码值,是一个可变的值,那么我们就需要在created中将这两个值对应起来,后面后续就可以直接使用this.curPage了:
props: {
dataNum: {
type: Number
, default: 100
}
, cur: {
type: Number
, default:1
} , each: {
type: Number
, default: 10
}
, visiblepage: {
type: Number
, default: 10
} }, data: function(){
return {
curPage:0
}
},created: function(){
this.curPage = this.cur;
} - 以上是我们已知的参数了,那么下面我们需要利用它们动态的去计算页码总数和具体要显示的页码:这部分我们放在computed中,具体神马原因移步vue文档啦~~
computed: {
totalPages: function(){
return Math.ceil(this.dataNum / this.each) || 0
}
, pages: function(){
var lowPage = 1;
var highPage = this.totalPages;
var pageArr = [];
if(this.totalPages > this.visiblepage){
var sub = Math.ceil(this.visiblepage/2);
if(this.curPage > sub && this.curPage < this.totalPages - sub +1){
lowPage = this.curPage - sub;
highPage = this.curPage + sub - 2;
}else if(this.curPage <= sub){
lowPage = 1;
highPage = this.visiblepage;
}else{
lowPage = this.totalPages - this.visiblepage + 1;
highPage = this.totalPages;
}
} while(lowPage <= highPage){
pageArr.push(lowPage);
lowPage ++;
}
return pageArr;
}
} - 下面添加我们用到的三个事件:
methods: {
btnClick: function(index){
this.curPage = index;
this.$emit('change-page', index)
}
, nextClick: function() {
if (this.curPage < this.totalPages) {
this.curPage++;
this.$emit('change-page', this.curPage)
}
}
, prevClick: function() {
if (this.curPage > 0) {
this.curPage--;
this.$emit('change-page', this.curPage)
}
}
} - 上面高亮显示的部分下面会重点来讲,结合三个黄色高亮部分,我们在父组件中要使用子组件的当前页码这个值来实现分页,因为vue2.0取消了$dispatch(),所以我们怎么能从子组件把数值传出来呢?这里2.0里用到了$emit()和v-on,所以这里可以看下vue2.0的文档,然后理解一下~我理解了半天才懂。。。脑子也是慢的没谁了。。。
<div id="app">
<div class="content">
<ul class="list">
<li v-for="i in curList">{{ i }}</li>
</ul>
</div>
<page :data-num="pagedata.length" :each="eachPageSize" :visiblepage="visiblepage" v-on:change-page="changePage"></page>
</div>data: function(){
return{
cur: 0
, dataNum: 0
, eachPageSize: 3
, visiblepage: 5 , pagedata: [1, 2, 3, 4, 5, 6, 7, 8, 9]
, curpage: 1
} }
, computed: {
curList: function () {
var p = [];
for(var i = 0,l= this.pagedata.length;i<l;i++){
p[i] = this.pagedata[i];
}
return p.splice((this.curpage-1) * this.eachPageSize, this.eachPageSize);
}
}
, methods: {
changePage: function (cur) {
this.curpage = cur
}
} - 上面绿色的高亮主要是解决对象引用的问题,这个问题嘛要说起来可就说来话长了。。后面我也得再捋一捋这个部分。红色高亮呢就是动态显示每一页的内容。
以上呢就是所有核心代码啦,最后显示的效果就是如下:切换时候的效果你们就自己下去尝试吧~~我要下班了哈哈~代码提交给小哥,明天说不定又有新问题要给我。。先回家睡个好觉再说~大家加油~

基于vue2.0的分页组件开发的更多相关文章
- 饿了么基于Vue2.0的通用组件开发之路(分享会记录)
Element:一套通用组件库的开发之路 Element 是由饿了么UED设计.饿了么大前端开发的一套基于 Vue 2.0 的桌面端组件库.今天我们要分享的就是开发 Element 的一些心得. 官网 ...
- 一款基于vue2.0的分页组件---写在页面内
通过 Vue2.0 实现的分页 可自由设置分页显示的多少.上一页.下一页.省略号等,也可直接输入跳转到的页码进行跳转,分页的样式可自由调整 // 1.页面的 head 部分,需要设计好页面的样式 .p ...
- vue2.0实现分页组件
最近使用vue2.0重构项目, 需要实现一个分页的表格, 没有找到合适的组件, 就自己写了一个, 效果如下: 该项目是使用 vue-cli搭建的, 如果你的项目中没有使用webpack,请根据代码自己 ...
- 基于VUE2.0的分页插件(很好用,很简单)
基于jQuery的分页插件很多,今天分享一下基于Vue的分页插件pagination.js,该插件使用用感觉很不错,简单不复杂,现将个人使用过程中的方法与遇到的问题以及实例分享出来. 下载解压的主要目 ...
- 基于Vue2.0的单页面开发方案
2016的最后一天,多多少少都应该总结一下这一年的得失,哪里做的好,哪里需要改进,记一笔,或许将来会用到呢. 毕业差不多半年了,一直是一个人在负责公司项目的前端开发与维护,当时公司希望前后端分离,提高 ...
- Vue2.0的通用组件
饿了么基于Vue2.0的通用组件开发之路(分享会记录) Element:一套通用组件库的开发之路 Element 是由饿了么UED设计.饿了么大前端开发的一套基于 Vue 2.0 的桌面端组件库. ...
- 基于vue2.0前端组件库element中 el-form表单 自定义验证填坑
eleme写的基于vue2.0的前端组件库: http://element.eleme.io 我在平时使用过程中,遇到的问题. 自定义表单验证出坑: 1: validate/resetFields 未 ...
- vue-swiper 基于Vue2.0开发 轻量、高性能轮播插件
vue-swiper 基于 Vue2.0 开发,基本满足大部分功能 轻量.高性能轮播插件.目前支持 无缝衔接自动轮播.无限轮播.手势轮播 没有引入第三方库,原生 js 封装,打包之后只有 8.2KB ...
- 干货分享:vue2.0做移动端开发用到的相关插件和经验总结(2)
最近一直在做移动端微信公众号项目的开发,也是我首次用vue来开发移动端项目,前期积累的移动端开发经验较少.经过这个项目的锻炼,加深了对vue相关知识点的理解和运用,同时,在项目中所涉及到的微信api( ...
随机推荐
- SpringMVC文件上传注意事项
简介 我在使用 idea 上传文件时遇到一些问题,费了好些时间,最后还是的队友来帮忙. 问题出现在没有熟练使用 IDE,采用 SpringMVC 上传文件主要注意几个事项. 1. 配置 bean 在 ...
- HTML 教程延伸阅读:改变文本的外观和含义
很多标签都可以用来改变文本的外观,并为文本关联其隐藏的含义.总地来说,这些标签可以分成两类:基于内容的样式(content-based style)和物理样式(physical style). 基于内 ...
- 艺萌文件上传下载及自动更新系统(基于networkComms开源TCP通信框架)
1.艺萌文件上传下载及自动更新系统,基于Winform技术,采用CS架构,开发工具为vs2010,.net2.0版本(可以很容易升级为3.5和4.0版本)开发语言c#. 本系统主要帮助客户学习基于TC ...
- EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(二)
前言 写完第一篇后,我一直在想接下来应该从哪一方面开始讲.后来我觉得不用那么死板的把每一个课程和大纲都列出来吧,毕竟我又不是教书的,呵呵...我觉得就像做实验一样,我们一部分一部分的完成,最后总个结果 ...
- Linux 文件访问权限
定义:<sys/stat.h> 每个文件有9个访问权限,可将其分为3类: 标记 含义 S_IRUSR 用户读 S_IWUSR 用户写 S_IXUSR 用户执行 S_IRGRP 组读 S_I ...
- Visual Studio 2015中快捷键总结
今天总结了Visual Studio工具中常用的快捷键,可供平时参考查阅. 程序调试相关的快捷键F5: 启动调试Ctrl+F5: 开始执行(不调试)Shift+F5: 停止调试Ctrl+Shift+F ...
- nodejs 转发websocket (websocket proxy)
const http = require('http') const server = http.createServer((req, res) =>{ res.end('hello world ...
- Eclipse 常用快捷键
Ctrl + Shift + L : 可以查看快捷键方式 Ctrl + 1 : 快速修复 Ctrl + / : 注释当前行 Ctrl + D : 删除当前行 Shift + Enter : 可以在当 ...
- 节点操作js jQuery
append() - 在被选元素的结尾插入内容 prepend() - 在被选元素的开头插入内容 after() - 在被选元素之后插入内容 before() - 在被选元素之前插入内容 functi ...
- .net 读取Excel文件报错
错误内容 Microsoft Office Excel 不能访问文件“D:\WWWRoot\Website\Test\Excels\Test1.xls”. 可能的原因有: 1 文件名称或路径不存在. ...