【发布时间】:2021-08-01 11:59:41
【问题描述】:
这个问题和This question很像
我已经使用 Laravel 建立了一个 Vue 页面,并在 GET 请求的帮助下显示所有帖子。我还在收听 Laravel ECHO 事件和unshifting all posts 数组的值,使其显示在顶部。
我已经使用this package 设置了无限滚动并为每页分页 5 个结果。结果出现在页面上,并且从侦听器推送到数组也可以。但是,当无限滚动加载第 2 个结果页面时,会重复第 6 个结果。
上述包接受next_cursor 一个偏移值作为参数而不是page=2,因此它会准确地加载该值而没有任何重复。
Controller.php
public function pusherGet(Request $request) {
$jobs = Job::orderBy('id','desc')->cursorPaginate();
return response()->json($jobs);
}
Vue 文件
<template>
<div>
<h3 class="text-center">All Jobs</h3><br/>
<div class="container">
<div class="card" v-for="(job,index) in jobs" :key="index">
<div class="card-body">
<h4 class="card-title">{{ job.id }}</h4>
<p class="card-text">{{ job.request_type}}</p>
</div>
</div>
</div>
<infinite-loading @infinite="getJob"></infinite-loading>
</div>
</template>
<script>
export default {
data() {
return {
page:1,
jobs: [],
}
},
mounted() {
this.listenNewJobs();
},
created() {
},
methods: {
listenNewJobs() {
Echo.channel('chat-room.1')
.listen('JobCreated', (e) => {
console.log(e);
this.jobs.unshift(e.job);
});
},
getJob($state) {
axios.get('getjobs', {
params: {
page: this.page,
},
}).then(({data})=> {
console.log(data)
if(data.data.length) {
this.page += 1;
this.jobs.push(...data.data)
$state.loaded();
} else {
$state.complete();
}
});
}
}
}
</script>
结果 Json
{
data: Array(5), path: "getjobs?page=1", previous_cursor: "100", next_cursor: "96", per_page: 5, …}
data: (5) [{…}, {…}, {…}, {…}, {…}]
next_cursor: "96" // this is the parameter which i should attach to the GET request to paginate correct results
next_page_url: "getjobs?page=1&next_cursor=96"
path: "getjobs?page=1"
per_page: 5
prev_page_url: "getjobs?page=1&previous_cursor=100"
previous_cursor: "100"
__proto__: Object
任何帮助将不胜感激。
编辑:如何设置 GET 请求的 URL 以对分页结果的 GET 请求响应的结果进行分页以避免第二页结果重复?
【问题讨论】:
-
问题是什么?
-
@ConnorLow 如何设置 GET 请求的 URL 以对分页结果的 GET 请求响应的结果进行分页以避免第二页结果重复
-
请edit你的问题。
标签: javascript php laravel vue.js axios