pagination.vue 2.06 KB
<template>

	<div class="pagination m-20-0">
		<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>
			<li v-for="index in totalPages" v-show="totalPages<8">
				<a v-bind:class="{ 'active': pageNo == index + 1 }" href="javascript:;" v-if="pageNo != index + 1" @click="goPage(index + 1)">{{index + 1}}</a>
				<span v-bind:class="{ 'active': pageNo == index + 1 }" v-else>{{index + 1}}</span>
			</li>

			<li v-for="index in prevnum" v-show="totalPages>7">
				<a v-bind:class="{ 'active': pageNo == index  }" href="javascript:;" v-if="pageNo != index " @click="goPage(index )">{{index }}</a>
				<span v-bind:class="{ 'active': pageNo == index  }" v-else>{{index}}</span>
			</li>
			<li v-for="index in nextnum" v-show="totalPages>7">
				<a v-bind:class="{ 'active': pageNo == index  }" href="javascript:;" v-if="pageNo != index " @click="goPage(index )">{{index }}</a>
				<span v-bind:class="{ 'active': pageNo == index  }" v-else>{{index }}</span>
			</li>

			<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
			},

		},
		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');
			}
		}
	};
</script>