Привет, Хабр! Представляю вашему вниманию перевод статьи "Pagination in Vue.js" автора Denny Headrick.
Пагинация увеличивает UX, позволяя пользователям визуализировать данные в небольших блоках или на страницах. Вот и компонент Vue.js можно сделать с разбивкой по страницам, который позволит нам просматривать только часть наших данных за раз.
Сначала я буду добавлять кусочек за кусочком в свой JavaScript объект. А затем покажу template (шаблон)
Из всех локальных данных, мне нужны, только данные?-?номер страницы.
data(){
return {
pageNumber: 0 // по умолчанию 0
}
}
props:{
listData:{
type:Array,
required:true
},
size:{
type:Number,
required:false,
default: 10
}
}
methods:{
nextPage(){
this.pageNumber++;
},
prevPage(){
this.pageNumber--;
}
}
pageCount(){
let l = this.listData.length,
s = this.size;
// редакция переводчика спасибо комментаторам
return Math.ceil(l/s);
// оригинал
// return Math.floor(l/s);
}
paginatedData(){
const start = this.pageNumber * this.size,
end = start + this.size;
return this.listData.slice(start, end);
}
<div>
<ul>
<li v-for="p in paginatedData">
{{p.first}}
{{p.last}}
{{p.suffix}}
</li>
</ul>
<button @click="prevPage">
Previous
</button>
<button @click="nextPage">
Next
</button>
</div>
:disabled=«pageNumber==0»а для кнопки nextPage добавлю:
:disabled=«pageNumber >= pagecount -1»Рабочая демонстрация моего компонента:
К сожалению, не доступен сервер mySQL