У меня возникают проблемы с выяснением, как изменить свойство vuetify pagination.page обратно на 1, когда пользователь изменяет свойство rowPerPage.
Скажем, в наборе результатов всего 23 строки иrowPerPage в настоящее время имеет значение 10. Если пользователь переходит на 3-ю (последнюю) страницу, а затем выбирает 50 rowPerPage, vue вызывает мой ajax-запрос, чтобы получить новые данные с внутреннего сервера, но он передает rowPerPage как 50 и передает страницу как 3.
Поскольку это приводит к тому, что свойство смещения sql становится равным 100, что намного больше, чем 23 записи в таблице, оно не возвращает никаких данных, поэтому экран перерисовывается без записей.
Что бы я хотел сделать, чтобы это исправить, когда свойство rowPerPage изменится, сбросьте свойство страницы обратно на 1.
Я набрал в кучу гугл, но не могу найти ответ.Я пытаюсь решить эту проблему неверным способом?
Редактировать: Вот пример кода моего рельса:
<v-card flat>
<v-card-title class="pt-0 pb-0">
<h2>No RSP/Participating Apps</h2>
<%= render :partial => "search" %>
<%= render :partial => "rows_per_page" %>
</v-card-title>
<v-data-table
:headers="headers"
:items="results"
:pagination.sync="pagination"
hide-actions
:total-items="totalItems"
:must-sort=true
:search="pagination.search"
>
...
</v-data-table>
<div class="text-xs-center pt-2">
<v-pagination v-model="pagination.page" :length="pages"></v-pagination>
</div>
</v-card>
И мой код JS:
data: {
search: '',
drawer: null,
miniVariant: false,
loading: true,
totalItems: 0,
results: [],
pagination: {
rowsPerPage: 10,
},
rowsPerPageChoices: [
{ text: '2 rows per page', value: 2 },
{ text: '5 rows per page', value: 5 },
{ text: '10 rows per page', value: 10 },
{ text: '20 rows per page', value: 20 },
{ text: '30 rows per page', value: 30 }
],
},
methods: {
commonQueryParams() {
return '?sortBy=' + this.pagination.sortBy +
'&descending=' + this.pagination.descending +
'&page=' + this.pagination.page +
'&rowsPerPage=' + this.pagination.rowsPerPage +
'&onlyTotal=0' +
'&filter=' + this.search;
},
queryParams() {
return this.commonQueryParams();
},
getData() {
this.loading = true;
axios.get(this.dataApiUrl + '/' + this.dataEndPoint + this.queryParams(), {withCredentials: true})
.then(response => {
this.results = response.data.data;
this.totalItems = response.data.control_data.total;
this.loading = false;
});
},
},
computed: {
pages () {
return this.pagination.rowsPerPage ? Math.ceil(this.totalItems / this.pagination.rowsPerPage) : 0;
}
},
watch: {
pagination: {
handler () {
this.getData();
},
deep: true
},
search: _.debounce(function () {
this.getData()
}, 500),
}