Vue vuejs-paginate
by kabanoki
HTML
<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.css">
<script src="https://unpkg.com/vuejs-paginate@latest"></script>
<div id="app">
<ul>
<li v-for="item in getItems">{{item}}</li>
</ul>
<paginate
:page-count="getPageCount"
:page-range="3"
:margin-pages="2"
:click-handler="clickCallback"
:prev-text="'<'"
:next-text="'>'"
:container-class="'pagination'"
:page-class="'page-item'">
</paginate>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.10/vue.min.js"></script>
CSS
body {
background: #20262E;
padding: 20px;
font-family: Helvetica;
}
#app {
background: #fff;
border-radius: 4px;
padding: 20px;
transition: all 0.2s;
}
li {
margin: 8px 0;
}
h2 {
font-weight: bold;
margin-bottom: 15px;
}
del {
color: rgba(0, 0, 0, 0.3);
}
Vue
var items = [];
for(var i=1; i<=105; i++){
items.push('item-'+i);
}
Vue.component('paginate', VuejsPaginate)
new Vue({
el: '#app',
data: {
items: items,
perPage: 10,
currentPage: 1
},
methods: {
clickCallback: function (pageNum) {
this.currentPage = Number(pageNum);
}
},
computed: {
getItems: function() {
let current = this.currentPage * this.perPage;
let start = current - this.perPage;
return this.items.slice(start, current);
},
getPageCount: function() {
return Math.ceil(this.items.length / this.perPage);
}
}
})