gpt4 book ai didi

laravel - 在 url Vuejs 中放置分页号

转载 作者:行者123 更新时间:2023-12-04 04:15:04 26 4
gpt4 key购买 nike

我有一个工作分页,使用(Laravel、Vuejs 和 Bootstrap-Vue),但我需要在 url 中添加页码才能使用历史记录。 (用于后退按钮)。这就是我到目前为止所拥有的。目标是放置页面编号。在 url 中,有一个后退按钮。

{
path: "/", //here I will change it with "/:id"
name: "Home",
component: Home,
},

<b-pagination
v-model="currentPage"
:per-page="perPage"
:total-rows="totalRows"
>
</b-pagination> //this is my pagination nav, that takes currentPage from get Request

axios.get('/list',{
params: {
'page': this.currentPage,
'per_page': this.perPage,
},
})
.then(response => {
this.perPage = response.data.per_page;
this.totalRows = response.data.total;
})
.catch(function (error) {
console.log('Error');
}) //and this is the get request

更新

我在获取响应时添加了 router.push({ path: "/", query: { page: this.currentPage } });。我有路径,但是当我尝试访问第 2 页时,它的 id 在 2 中发生了变化,然后又在 1 中发生了变化。我得到了一个重复的错误。

NavigationDuplicated {_name: "NavigationDuplicated", name: "NavigationDuplicated", message: "Navigating to current location ("/?page=1") is not allowed"

更新 2我几乎成功了,唯一还没有工作的是事件类,在分页时,总是第 1 页是事件的。 (内容、url 和 currentPage 变量已更改)

watch:{
currentPage() {
this.$router
.push({
query: {
...this.$route.query,
page: this.currentPage
}
})
.catch(() => {});
},
}

//In reseponse from axios:
this.currentPage = response.data.current_page;

最佳答案

基于 this answer关于如何用另一个替换当前查询,以及 this answer关于如何简单地忽略该错误,我提出了以下解决方案。

我使用计算属性在当前页面更改时自动更改 URL,并根据答案向我们的推送添加一个空的 .catch 以抑制错误,因为它仍然只是导航很好。

编辑

它完全忘记了用于更改 URL 的 b-pagination-nav 组件。我认为第一个例子在 documentation可能对您有用,因为这会使用 ?page=n 查询更改当前页面。

<template>
<b-pagination
v-model="currentPage"
:per-page="perPage"
:total-rows="totalRows"
>
</b-pagination>
<b-table :items="items" :current-page="currentPage" :per-page="perPage">
</b-table>
</template>

<script>
export default {
created() {
// Save the page for later use.
// If our query isn't found, we default to page 1.
const page = this.$route.query.page || 1;

// fetch our data, this fetches all records and uses clientside pagination.
fetch("https://example.com/movies.json")
.then(resp => resp.json())
.then(data => {
this.items = data;

// since b-pagination will change the currentPage to 1,
// we need to change it back to the actual page after fetching our items.
this.$nextTick(() => {
this.currentPage = page;
});
});
},
computed: {
totalRows() {
return this.items.length;
},
currentPage: {
get() {
return this.$route.query.page || 1;
},
set(newPage) {
// You could alternatively call your API here if you have serverside pagination

this.$router
.push({ query: { ...this.$route.query, page: newPage } })
.catch(() => {});
}
}
},
data() {
return {
perPage: 5,
items: []
};
}
};
</script>

关于laravel - 在 url Vuejs 中放置分页号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60862188/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com