采用Vue2.0开发的分页js组件

Posted 暴脾气大大

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了采用Vue2.0开发的分页js组件相关的知识,希望对你有一定的参考价值。

2017-11-17 19:14:23

基于jQuery的分页插件相信大家伙已经都用过很多了,今天分享一下基于Vue2.0的分页插件pagination.js

由于项目需求,要求使用 Vue2.0 开发一套有关分页的组件 

这款 pagination.js 组件,可以按照各自需求定制,以下代码可以直接复制引入项目中

// 1、Vue写的分页有两个参数         

// pages:总页数,pageNo:当前页

// 直接上代码,考虑到兼容 IE 等浏览器,其中 template 直接使用字符串拼接方式

 1 /**
 2  * author: tyd
 3  * createTime: 2017/11/13
 4  * title: 分页组件
 5  */
 6 var pageComponent = Vue.extend({
 7     template: \'<nav aria-label="Page navigation">\'+
 8                     \'<ul class="pagination">\'+
 9                         \'<li :class="{\\\'disabled\\\':curPage==1}">\'+
10                            \'<a href="javascript:;" @click="goPage(curPage==1?1:curPage-1)" aria-label="Previous">\'+
11                                 \'<span aria-hidden="true">上一页</span>\'+
12                            \'</a>\'+
13                        \'</li>\'+
14                        \'<li v-for="page in showPageBtn" :class="{\\\'active\\\':page==curPage}">\'+
15                             \'<a href="javascript:;" v-if="page" @click="goPage(page)">{{page}}</a>\'+
16                              \'<a href="javascript:;" v-else>···</a>\'+
17                        \'</li>\'+
18                        \'<li :class="{\\\'disabled\\\':curPage==pages}">\'+
19                            \'<a href="javascript:;" @click="goPage(curPage==pages?pages:curPage+1)" aria-label="Next">\'+
20                                    \'<span aria-hidden="true">下一页</span>\'+
21                            \'</a>\'+
22                         \'</li>\'+
23                         \'<li :class="{\\\'disabled\\\':pages==pages}">\'+
24                            \'<a href="javascript:void(0);">\'+
25                                     \'共  {{pages}} 页\'+
26                            \'</a>\'+
27                        \'</li>\'+
28                    \'</ul>\'+
29                \'</nav>\',
30     // 用户组件传递数据            
31     props: {
32         pages: {
33             type: Number,
34             default: 1
35         },
36         current: {
37             type: Number,
38             default: 1
39         }
40     },
41     data:function (){
42         return{
43             curPage:1
44         }
45     },
46     computed: {
47         // 显示分页按钮
48         showPageBtn:function() {
49             let pageNum = this.pages; // 总页数
50             let index = this.curPage; // 当前页
51             let arr = [];
52             if (pageNum <= 6) {
53                 for (let i = 1; i <= pageNum; i++) {
54                     arr.push(i)
55                 }
56                 return arr
57             }
58             // 对页码显示进行处理,动态展示
59             if (index <= 3) return [1, 2, 3, 4, 0, pageNum];
60             if (index >= pageNum - 1) return [1, 0, pageNum - 3, pageNum - 2, pageNum - 1, pageNum];
61             if (index === 4) return [1, 2, 3, 4, 5, 0, pageNum];
62             if (index === pageNum - 2) return [1, 0, pageNum - 4, pageNum - 3, pageNum - 2, pageNum - 1, pageNum];
63             return [1, 0, index - 2,index - 1, index, index + 1, index + 2, 0, pageNum];
64         }
65     },
66     methods: {
67         goPage:function(page) {
68             if (page != this.curPage) {
69                 console.log(page);
70                 this.curPage = page;
71                 this.$emit(\'navpage\', this.curPage);
72             }else{
73                 console.log(\'Already in the current page\');
74             }
75         }
76     }
77 });
78 Vue.component(\'navigation\', pageComponent); // 注册组件

// 2、简单的演示 html

 1 <!DOCTYPE html>
 2 <html lang="en">
 3     <head>
 4         <meta charset="UTF-8">
 5         <title>Vue2.0分页组件</title>
 6         <link href="https://cdn.bootcss.com/bootstrap/3.3.4/css/bootstrap.css" rel="stylesheet">
 7         <script src="https://cdn.bootcss.com/vue/2.5.3/vue.js"></script>
 8         <!-- 引入外部的 pagination.js 组件即可 -->
 9         <script type="text/javascript" src="pagination.js"></script>
10     </head>
11     <body>
12         <div id="app" class="text-right" style="text-align: center;">
13             <navigation :pages="pages" :current.sync="pageNo" @navpage="pageList"></navigation>
14         </div>
15         <script type="text/javascript">
16             new Vue({
17                 el: "#app",
18                 data: {
19                     pageNo: 1,
20                     pages: 100
21                 },
22                 methods: {
23                     pageList:function(curPage) {
24                         //根据当前页获取数据
25                         this.pageNo = curPage;
26                         console.log("当前页:" + this.pageNo);
27                     }
28                 }
29             })
30         </script>
31     </body>
32 </html>

 演示:

以上是关于采用Vue2.0开发的分页js组件的主要内容,如果未能解决你的问题,请参考以下文章

一款基于vue2.0的分页组件---写在页面内

用Vue2.0实现简单的分页及跳转

vue2.0学习笔记之组件

Vue2.0+ElementUI实现表格翻页

datagrid 修改分页组件的分页提示信息为中文

vue2.0使用介绍