#javascript #ajax #laravel #vue.js
#javascript #ajax #laravel #vue.js
Вопрос:
Я установил laravel-vue-pagination с помощью:
npm install laravel-vue-pagination
Затем я зарегистрировал его глобально в app.js:
Vue.component('pagination', require('laravel-vue-pagination'));
Наконец, у меня было меню, и в каждом меню есть категории, а в каждой категории есть продукты. Разбивка на страницы должна отображать 3 продукта на странице. Оно показывало первую страницу, а под ней было количество доступных страниц, но страницы были недоступны для просмотра. Я нажал на страницу 2 или 3, и ничего не происходит.
<div class="card-body">
<body>
<tbody>
<template v-for="product in catProducts.data" v-if="product.CATUID === category.CATID">
<tr>
<td @click="editText(product.ID '-descript')">
<span v-if="!show(product.ID '-descript')">{{product.DESCRIPT}}</span>
<input v-if="show(product.ID '-descript')" type="text" v-focus="focused" @focus="focused = true" v-model="product.DESCRIPT" @blur="hide(product.RID ,product.ID ,product.DESCRIPT, 'DESCRIPT')" @keyup.prevent.enter="hide(product.RID ,product.ID ,product.DESCRIPT, 'DESCRIPT')"></td>
<td @click="editText(product.ID '-tag1')">
<span v-if="!show(product.ID '-tag1')">{{product.TAG1}}</span>
<input v-if="show(product.ID '-tag1')" type="text" v-focus="focused" @focus="focused = true" v-model="product.TAG1" @blur="hide(product.RID ,product.ID ,product.TAG1, 'TAG1')" @keyup.prevent.enter="hide(product.RID ,product.ID ,product.TAG1, 'TAG1')"></td>
<td @click="editText(product.ID '-tag2')">
<span v-if="!show(product.ID '-tag2')">{{product.TAG2}}</span>
<input v-if="show(product.ID '-tag2')" type="text" v-focus="focused" @focus="focused = true" v-model="product.TAG2" @blur="hide(product.RID ,product.ID ,product.TAG2, 'TAG2')" @keyup.prevent.enter="hide(product.RID ,product.ID ,product.TAG2, 'TAG2')"></td>
<td @click="editText(product.ID '-price')">
<span v-if="!show(product.ID '-price')">{{product.PRICE}}</span>
<input v-if="show(product.ID '-price')" type="text" v-focus="focused" @focus="focused = true" v-model="product.PRICE" @blur="hide(product.RID ,product.ID ,product.PRICE, 'PRICE')" @keyup.prevent.enter="hide(product.RID ,product.ID ,product.PRICE, 'PRICE')"></td>
</tr>
</template>
</tbody>
</table>
</div>
И:
<pagination :data="catProducts" @pagination-change-page="getResults(category.CATID)"></pagination>
Единственное различие между github и моим заключается в добавлении CATID в ajax:
getResults(catid, page = 1) {
axios.get('api/getproducts/' this.restid '/' catid '?page=' page)
.then(response => {
this.products = response.data;
});
},
Есть идеи, как заставить работать меню разбивки на страницы?
Комментарии:
1.
div -> body -> tbody
не похоже ни на какую правильную иерархию HTML
Ответ №1:
Помимо странной иерархии HTML, вы не захватываете выбранную страницу из pagination-change-page
события
Попробуйте использовать следующее (обратите внимание на использование $event
)
<pagination
:data="catProducts"
@pagination-change-page="getResults(category.CATID, $event)"
></pagination>
Вы также можете немного очистить свой getResults
метод
async getResults (catid, page = 1) {
const url = `api/getproducts/${encodeURIComponent(this.restid}/${encodeURIComponent(catid)}`
const { data } = await axios.get(url, { params: { page } })
this.products = data;
},