因为移动端滚动加载分页是必须做的,网上也有很多插件,我用的是pull-to,这个很简单,先安装一波,
npm install vue-pull-to --save
//然后引进来,放在组件上面注册好
import PullTo from 'vue-pull-to'
官网文档在这里:https://github.com/stackjie/vue-pull-to/blob/master/README.zh-CN.md
现在我要根据我的项目来给大家说一下操作和坑:
<div id="pullContain">
  <pull-to @infinite-scroll="getMoreList" class="file-lists">
    <ul>
      <li v-for="(fileItem,index) in filesList.fileList" :key="index" @click="dealFile(fileItem)">
      </li>
      <span  class="show-msg" v-show="filesList.recordCount==0">这里什么都没有了哦</span>
    </ul>
  </pull-to>
</div>
上面的infinte-scroll方法指的是下拉到底部的时候触发的函数,我让他进入getMoreList这个方法中,其他方法效果可以参考官方文档,但是有个坑一定一定要注意,
组件会默认占据父元素的百分之百高度,一定要注意给一个高度,反正就是让组件占父元素的100%,否则不管你怎么下拉都不会触发函数,这个操作就很简单,能触发了,关键是怎么去请求更多

下面我贴下我getMoreList的代码:

 getMoreList(loaded){
        this.pageNum++;
        var that = this;
        if (!that.loaded) {
          that.isShowLoading=true;
          var params = {
                familyId: this.familyId,
                pageNum: this.pageNum,
                iconOption:1,
                pageSize: this.pageSize
        }
        if(this.$route.params.fileId!=this.familyId){
          params.folderId =this.$route.params.fileId;
        }
          this.$axios.get( //传参发起请求    
            "https://home.cloud.189.cn/fmFile/listFiles.action", {
              params
            }
          ).then(function (response) { //接口返回数据
            console.log(Math.ceil(response.data.recordCount/response.data.pageSize));
            if (that.pageNum ==Math.ceil(response.data.recordCount/response.data.pageSize)) {//
              that.loaded = true;
            }
            that.filesList.fileList.push(...response.data.fileList); //push进去渲染
             that.isShowLoading=false;
             that.ShowLoadingTip="没有更多了";
            // loaded && loaded("done");
          }, function (error) {
            that.pageNum--;
            console.log("error");
          })
        }

load参数是默认传进来的,其实就是很简单的事情,当下拉到底部的时候,我们就向后台请求pageNum+1的数据,其中上述的params的那些字段是我这边的接口必须的,你可以根据你的来写,然后push到当前的列表上继续渲染出来,那什么时候停止呢,就是当你的pageNum等于后台的总页数的时候,你把loaded=true,它就不进入这个函数去发请求到后台拿数据了,所以刚开始的时候给loaded为false一个初始值。

上述还有那些showloadingTip你不用管,那是我另外加的提高用户体验的而已。一个滚动下拉加载请求分页就完成了,有什么问题可以留言讨论哈,大家一起努力。

Logo

前往低代码交流专区

更多推荐