最详细的vue+vant的上拉加载,下拉刷新

2021-12-19  本文已影响0人  jesse28
 <van-pull-refresh v-model="refreshing" @refresh="onRefresh">
    <van-list v-model="loading" :finished="finished" finished-text="没有更多数据了哦!" @load="onLoad">
      <!-- item-all   start -->
      <div class="item-all" v-for="(item,index) in tableData" :key="index">
        <div class="item">
          <span class="itemLeft">检查人名称:</span>
          <span class="item-right">{{item.checkUserName}}</span>
        </div>
        <div class="item">
          <span class="itemLeft">行业类型:</span>
          <span class="item-right">{{item.tradeCategory}}</span>
        </div>
        <div class="item">
          <span class="itemLeft">检查对象名称(姓名):</span>
          <span class="item-right">{{item.checkObjectName}}</span>
        </div>
        <div class="item">
          <span class="itemLeft">检查时间:</span>
          <span class="item-right">{{item.startTime | switchTime}}-{{item.endTime | switchTime}}</span>
        </div>
        <div @click="handleDetail(item.id)" class="handle-button">待处理</div>
      </div>
      <!-- item-all   end -->
    </van-list>
  </van-pull-refresh>

第一步:一进来的时候页面会加载@load = "onLoad"绑定的onLoad函数。

methods:{
//组件滚动到底部触发事件==>初始化会触发一次load事件,用于加载第一屏数据
   onLoad() {
     this.getList(); //调用请求接口数据的方法
   },
 }  
  //调用接口请求数据
   getList() {
     apiPubSearchMyTask({
       pageNum: this.pageNum,
       pageSize: this.pageSize,
       status:'1',
     }).then((res) => {
       this.total = res.data.total;
       if (this.pageNum == 1) {
         this.tableData = res.data.list;
       } else {
         //页数加1再次调用接口赋值数据
         this.tableData = this.tableData.concat(res.data.list);
       }
       if (this.tableData.length < this.total) {
         this.pageNum = this.pageNum + 1;
       } else {
         this.finished = true;
       }
       //如果loading为true,是不会触发@load事件,因为第一次一进来就触发@load事件把loading = true,
       //所以这里要loading= false,这样滚动到底部才能触发@load事件
       this.loading = false;
     }).catch(()=>{
        this.loading = false;
     });

    下拉刷新的方法
   //下拉刷新触发事件
   onRefresh() {
     console.log('下拉刷新')
     this.pageNum = 1
      apiPubSearchMyTask({
       pageNum: this.pageNum,
       pageSize: this.pageSize,
     }).then(res=>{
        this.total = res.data.total;
        this.tableData = res.data.list
        this.refreshing =false
        this.finished = false// 如果数据全部加载完毕之后,下拉刷新需要把finished质为false
       this.$toast('刷新成功')
       // 当此时tableData的数据长度<total,需要+1页数,不然当我在滚动到底部的时候调用接口还
       // 是用pageNum=1第一页去调用接口数据,这样不对,应该是第二页了。
       if(this.tableData.length < this.total){
         this.pageNum = this.pageNum +1 
       }else{
         this.finished = true
       }
     })
     
   },
   },

接口返回的数据


image.png

这边额外做个补充:
如何这边涉及到兄弟组件之间传递数据,需要用到

let $bus = new Vue()
$bus.$emit("")     
   
$bus.$on("",()=>{
})
上一篇下一篇

猜你喜欢

热点阅读