vuejs 分页组件

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <script src="/Scripts/jquery-1.8.0.js"></script>
    <style type="text/css">
        ul.page > li {
            list-style: none;
            display: inline;
        }

            ul.page > li > a, ul.page > li > span {
                padding: 6px 12px;
                margin-left: -1px;
                line-height: 1.42857143;
                color: #337ab7;
                text-decoration: none;
                background-color: #fff;
                border: 1px solid #ddd;
            }

            ul.page > li > a {
                cursor: pointer;
            }

                ul.page > li > a.active, ul.page > li > span.active {
                    color: #fff;
                    cursor: default;
                    background-color: #337ab7;
                    border-color: #337ab7;
                }

                ul.page > li > a[disabled] {
                    color: #777;
                    cursor: not-allowed;
                    background-color: #fff;
                    border-color: #ddd;
                }

                ul.page > li > span.CustomInfo {
                    color: black;
                }
    </style>
</head>
<body>
    <div id="app">
        <!--加上.sync 为双向传递  :page-Count.sync="pageCount"-->
        <vue-pagination :page-Count="pageInfo.pageCount" :total-Count="pageInfo.entityCount" v-on:pagechange="pageChange"></vue-pagination>
        {{pageInfo}}
    </div>
    <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
    <script src="https://cdn.staticfile.org/axios/0.18.0/axios.min.js"></script>
    <script type="text/javascript">

        //翻页组件开始
        Vue.component('vue-pagination', {
            data: function () {
                return {
                    pageCurrent: 1,
                    pageGroup: 10
                }
            },
            props: {
                pageCount: {
                    type: Number,
                    default: 0
                },
                totalCount: {
                    type: Number,
                    default: 0
                }
            },
            template: '<ul class="page">'
                + '<li><a v-on:click="pageChange(1)" :disabled="pageCurrent>1?null:\'disabled\'">首页</a></li>'
                + '<li><a v-on:click="pageChange(pageCurrent-1)" :disabled="pageCurrent>1?null:\'disabled\'">上一页</a></li >'
                + '<li v-for="item in indexs"><a v-on:click="pageChange(item.val)" :class="{active:item.active}">{{ item.text }}</a></li >'
                + '<li><a v-on:click="pageChange(pageCurrent+1)" :disabled="pageCurrent<pageCount?null:\'disabled\'">下一页</a></li >'
                + '<li><a v-on:click="pageChange(pageCount)" :disabled="pageCurrent<pageCount?null:\'disabled\'">尾页</a></li>'
                + '<li><span class="CustomInfo">第 {{ pageCurrent }} 页 共 {{ pageCount }} 页 共 {{ totalCount }} 条记录</span></li>'
                + '</ul>',
            methods: {
                // 页码点击事件
                pageChange: function (pageNo) {
                    if (pageNo != this.pageCurrent && pageNo > 0 && pageNo <= this.pageCount) {
                        this.pageCurrent = pageNo;
                        this.$emit('pagechange', this.pageCurrent)
                    }
                }
            },
            computed: {
                indexs() {
                    var eIndex = parseInt((this.pageCurrent + (this.pageGroup - 1)) / this.pageGroup) * this.pageGroup;
                    var sIndex = eIndex - (this.pageGroup - 1);
                    eIndex = eIndex > this.pageCount ? this.pageCount : eIndex;
                    var indexArr = new Array();

                    if (eIndex > this.pageGroup) {
                        indexArr.push({ val: eIndex - 1, active: false, text: '...' });
                    }
                    for (var i = sIndex; i <= eIndex; i++) {
                        indexArr.push({ val: i, active: i == this.pageCurrent, text: i });
                    }
                    if (eIndex < this.pageCount) {
                        indexArr.push({ val: eIndex + 1, active: false, text: '...' });
                    }
                    return indexArr;
                }
            }
        })
        //翻页组件结束

        var app = new Vue({
            el: '#app',
            data() {
                return {
                    pageInfo: {},
                    pageSize: 15
                }
            },
            mounted() {
                this.pageChange(1);//首次加载第一页                
            },
            methods: {
                pageChange: function (pageNo) {
                    //翻页会触发此事件
                    axios({
                        url: "TabPannel.aspx/GetPageList",
                        method: "post",
                        headers: {
                            'Content-Type': 'application/json; charset=utf-8'
                        },
                        data: {
                            pageNo: pageNo,
                            pageSize: this.pageSize
                        }
                    }).then(response => (this.pageInfo = response.data.d)).
                        then((response) => {
                            //console.log(response);
                        }).catch((error) => { // 请求失败处理
                            console.log(error);
                        });
                }
            }
        })      
    </script>

</body>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值