关于vue上拉加载下拉刷新的问题
我们在使用vant组件使用list列表和PullRefresh下拉刷新的时候,可以组合起来使用上拉加载,下拉刷新这个一个特性
- isloading这个属性是 是否在加载中,如果加载完成的话,我们让它置为false
- refresh这个方法使我们在下来刷新的时候的回调函数
- 然后是
van-list
中的loading
和finished
和load
方法
- List 组件通过loading和finished两个变量控制加载状态,当组件滚动到底部时,会触发load事件并将loading设置成true。此时可以发起异步操作并更新数据,数据更新完毕后,将loading设置成false即可。若数据已全部加载完毕,则直接将finished设置成true即可
- load方法 就是加载的过程
loading 和 finished 分别是什么含义?
- List有以下三种状态,理解这些状态有助于你正确地使用List组件:
非加载中,loading为false,此时会根据列表滚动位置判断是否触发load事件(列表内容不足一屏幕时,会直接触发) - 加载中,loading为true,表示正在发送异步请求,此时不会触发load事件
- 加载完成,finished为true,此时不会触发load事件
在每次请求完毕后,需要手动将loading设置为false,表示加载结束
在项目中使用下拉刷新上拉加载的过程
- 首先后端设计好,每页的请求个数和页数。我之前碰到的刷新和加载的这个情况下,请求后端的数据时,需要假如请求的页数和一页的数据个数。
- 我们在load这个加载函数中,首先就是发送请求获得我们的数据。然后做回调函数,我们在回调函数中,把数据填入list列表中。在每一页的请求后,数据填充过后,我们需要把loading设置为false(这个是加载状态),然后把页数加一。然后判断是否全部数据加载完毕。如果数据全部加载完毕的时候,我们需要把页数调为最初的那个页数,根据后台定义的第一次请求的页数是0或者是1,然后还需要设置数据加载完毕的状态(
finished = true
) - onRefresh(下拉函数),这个函数中我们需要重新加载数据。首先我们需要清空list列表里面的数据,然后设置一些参数 如
loading
finished
isloading
这三个参数 - 我觉得在使用这个功能的时候,注意状态的改变,以及参数的设置。
根据我自己的demo,总结一下这几个参数的设置
- 首先在data里面的五个参数分别为下面
data() {
return {
count: 0,
list: [],
isLoading: false,
loading: false,
finished: false,
page:1,
per:5
};
}
- 然后是onLoad这个方法中的代码以及参数问题
this.$store
.dispatch({
type: 'xxxx',
payload: {
page: this.page,
per: this.per
}
})
.then(data => {
console.log(data);
this.count = data.count;
for (let i = 0; i < data.items.length; i++) {
this.list.push(data.items[i]);
}
this.loading = false;
this.page++;
if (this.list.length >= this.count) {
this.finished = true;
this.page = 1;
}
})
.catch(err=>{
console.log(err);
})
this.list = [];
this.page = 1;
this.loading = true;
this.finished = false;
this.onLoad('replace');
this.$toast('刷新成功');
this.isLoading = false;