我目前正在使用Vue无限加载我的Laravel应用程序来显示数据,我面临的问题是,当页面加载它请求所有数据,即使我不使页面滚动。从我所了解的,它应该只在我的当前滚动在底部时请求。下面是我的代码。
<infinite-loading :on-infinite="onInfinite" spinner="spiral" ref="infiniteLoading">
<span slot="no-more"></span>
</infinite-loading>
import InfiniteLoading from 'vue-infinite-loading';
export default {
data: function(){
return {
leagueLeaders: [],
playerStats: [],
pagination: 1,
}
},
methods: {
components: {
InfiniteLoading,
},
onInfinite() {
let self = this;
axios.get(config.NBLAPI + config.API.PLAYERSTATS2, {
params: {
page: self.pagination,
}
}).then( (response) => {
let data = response.data.data;
let lastpage = response.data.last_page;
if ( response.status == 200 && data.length > 0) {
self.leagueLeaders = self.leagueLeaders.concat(data);
self.$refs.infiniteLoading.$emit('$InfiniteLoading:loaded');
if(self.pagination <= lastpage){
self.pagination += 1;
}
}
else {
self.$refs.infiniteLoading.$emit('$InfiniteLoading:complete');
}
});
},
},
mounted: function() {
}
}
3条答案
按热度按时间k2arahey1#
我注意到了同样的行为,并找出了我这边的原因。如果结果的第一页没有填满 Package 的UI元素,那么Vue无限加载将自动分页,直到它填满为止。这导致了在初始加载时,当我没有放入足够的数据来填充第一页上的元素时,会加载2个页面。我使用开发工具来减少UI的大小,直到初始加载填满了元素。然后就像预期的那样工作了希望这能有所帮助!
bq3bfh9z2#
通过删除父元素上的
overflow:hidden;
解决了此问题ztyzrc3y3#
发生此行为的原因是,在您的第一个请求后,您触发了事件loaded
self.$refs.infiniteLoading.$emit('$InfiniteLoading:loaded');
,并且您的数据未完全显示在页面上。由于数据还没有完全显示,它将留下剩余空间,并且vue-infinite-loading将假定它将需要进行更多请求。
为了防止这种情况,您可以使用
setTimeout()
函数将self.$refs.infiniteLoading.$emit('$InfiniteLoading:loaded');
延迟几秒钟,以等待页面上呈现数据。