Vue.component('vue-robust-pagination', { props: { pages: { type: Number, required: true }, navigation: { type: Boolean, }, url: { type: String }, initialactive: { type: Number } }, template: `
`, data() { return { activePage: 0 } }, computed: { pagination() { return new Array(this.pages); }, prevUrl() { let newPage = Math.max(0, this.activePage - 1); return this.url + (newPage + 1); }, nextUrl() { let newPage = Math.min(this.pages - 1, this.activePage + 1); return this.url + (newPage + 1); } }, methods:{ setActivePage(index) { this.activePage = index; this.$emit('onchange', this.activePage + 1); }, goPrev() { let newPage = Math.max(0, this.activePage - 1); this.setActivePage(newPage); }, goNext() { let newPage = Math.min(this.pages - 1, this.activePage + 1); this.setActivePage(newPage); } }, created() { if (this.initialactive) { this.activePage = this.initialactive - 1; } }, watch: { pages() { console.log(this.pages); Vue.nextTick(() => { // let paginationList = this.$el.querySelector('.vue-robust-pagination__list'); // let paginationItems = this.$el.querySelectorAll('.vue-robust-pagination__item'); // let paginationItemWidth = paginationItems[0].clientWidth; // let vueRobustPaginationWidth = this.$el.clientWidth; // let vueRobustPaginationCommonWidth = paginationItemWidth * paginationItems.length; // let hiddenItemsCount = ~~((vueRobustPaginationCommonWidth - vueRobustPaginationWidth) / paginationItemWidth) + 2; // let visiblePaginationMiddle = ~~(vueRobustPaginationWidth / paginationItemWidth / 2); // let itemsGap = document.createElement('li'); // itemsGap.classList.add('vue-robust-pagination__item'); // itemsGap.innerHTML = `...`; // // paginationList.replaceChild(itemsGap, paginationItems[visiblePaginationMiddle]); // // for (let i=0; i