paginationN.vue 3.3 KB
<template>

    <div class="pagination" :class="classs">
        <ul>

            <li>
                <a v-if="pageNo !=1" href="javascript:;" @click="goPage(1)">首页</a>
                <span v-else>首页</span>
            </li>

            <li>
                <a v-if="pageNo > 1" href="javascript:;" @click="goPage(pageNo - 1)">上一页</a>
                <span v-else>上一页</span>
            </li>
            <template v-if="totalPages<11">
                <li v-for="index in totalPages">
                    <a :class="{ 'active': pageNo == index + 1 }" href="javascript:;" v-if="pageNo != index + 1"
                       @click="goPage(index + 1)">{{index + 1}}</a>
                    <span :class="{ 'active': pageNo == index + 1 }" v-else>{{index + 1}}</span>
                </li>
            </template>
            <template v-if="totalPages>10">
                <li v-for="index in prevnum">
                    <a :class="{ 'active': pageNo == index  }"
                       href="javascript:;" v-if="pageNo != index "
                       @click="goPage(index )">{{index }}</a>
                    <span :class="{ 'active': pageNo == index  }" v-else>{{index}}</span>
                </li>
            </template>
            <template v-if="totalPages>10">
                <li v-for="index in nextnum">
                    <a :class="{ 'active': pageNo == index  }"
                       href="javascript:;" v-if="pageNo != index"
                       @click="goPage(index )">{{index}}</a>
                    <span :class="{ 'active': pageNo == index }" v-else>{{index }}</span>
                </li>
            </template>
            <li>
                <a v-if="pageNo < totalPages" @click="goPage(pageNo + 1)" href="javascript:;">下一页</a>
                <span v-else>下一页</span>
            </li>
        </ul>
    </div>
</template>

<script>
    module.exports = {
        props: {
            'pageNo': {
                twoWay: true,
                type: Number,
                default: 1
            },
            'totalPages': {
                twoWay: true,
                type: Number,
                default: 0
            },
            'classs': {
                type: Array,
                default: []
            }
        },
        computed: {
            prevnum: function () {
                var arr = [];
                var n = this.pageNo - 1;
                if (n <= 0) {
                    return arr
                }
                while (n > 0) {
                    if (arr.length < 3) {
                        arr.unshift(n);
                    }
                    n -= 1;
                }
                return arr;
            }, nextnum: function () {
                var arr = [];
                var n = this.pageNo;
                for (var i = 0; i < 4; i++) {
                    if (n <= this.totalPages) {
                        arr.push(n)
                        n += 1;
                    }
                }
                return arr;
            }
        },
        methods: {
            goPage: function (num) {
                this.pageNo = num;
                this.$dispatch('page-change');
            }
        },
        route: {
            activate: function () {
                console.log(this.pageNo)
            }
        }
    };
</script>