加载页面时出现Vue Infinite加载多个请求问题

jyztefdp  于 2022-11-17  发布在  Vue.js
关注(0)|答案(3)|浏览(444)

我目前正在使用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() {

            }
}
k2arahey

k2arahey1#

我注意到了同样的行为,并找出了我这边的原因。如果结果的第一页没有填满 Package 的UI元素,那么Vue无限加载将自动分页,直到它填满为止。这导致了在初始加载时,当我没有放入足够的数据来填充第一页上的元素时,会加载2个页面。我使用开发工具来减少UI的大小,直到初始加载填满了元素。然后就像预期的那样工作了希望这能有所帮助!

bq3bfh9z

bq3bfh9z2#

通过删除父元素上的overflow:hidden;解决了此问题

ztyzrc3y

ztyzrc3y3#

发生此行为的原因是,在您的第一个请求后,您触发了事件loaded self.$refs.infiniteLoading.$emit('$InfiniteLoading:loaded');,并且您的数据未完全显示在页面上。
由于数据还没有完全显示,它将留下剩余空间,并且vue-infinite-loading将假定它将需要进行更多请求。
为了防止这种情况,您可以使用setTimeout()函数将self.$refs.infiniteLoading.$emit('$InfiniteLoading:loaded');延迟几秒钟,以等待页面上呈现数据。

相关问题