用vue-scroller做上拉刷新,下拉加载的模板(简单明了,通用)

1.首先下插件,并在你的vue项目中引人

 

1   npm i vue-scroller -D
2   import VueScroller from 'vue-scroller

 

 

2.Vue.use(VueScroller )(这一步别忘啦)

 

3.在你需要做上拉刷新,下拉加载的地方加上<scroller></scroller>标签(附上我的代码,这个自行替换,一般都是做列表的时候加)

 

1   <scroller :on-refresh="refresh" :on-infinite="infinite" ref="myscroller">
2    <ul>
3     <li v-for="(item,i) in arr"  :key="i">
4     </li>
5    </ul>
6   </scroller>
 
 
4.接下来就是最重要的逻辑代码了
 
    (1)在data里面我定义了4个参数(这里是做上拉刷新下拉加载需要用到的参数)
   
1 data() {
2             return {
3                 noDate:false,//这是一个判断是否加载的开关
4                 arr:[],
5                 page:1,
6                 pageSize:10
7             }
8         }
           
 
   (2)methods里面定义三个方法
 
  
 1  methods:{
 2    // 获取数据
 3     getData(){
 4          var that=this;
 5          axios.get('/api/article/findArticleList',{params:{pageNum:that.page,pageSize:that.pageSize}})
 6      .then(function(data){
 7                          if(data.data.success){
 8           //这一步是判断你当前请求的这一页数据是不是最后一页,如果是最后一页就不能请求了(这个根据后端给的接口判断,只要能判断出就行了,如果是最后一页给that.noDate=true)
 9                                that.noDate=data.data.data.isLastPage;
10                                // 判断是下拉刷新还是上拉加载(这一步也是比较巧妙的,当然也很好理解)
11                                if(that.page==1){
12                                      that.arr=data.data.data.list;
13                              }else{
14                                       that.arr=that.arr.concat(data.data.data.list)
15                               }
16                           }
17                      })
18            },
19         // 下拉刷新
20       refresh(){
21          this.page=1;//重置页数刷新每次页数都是第一页
22          this.noDate=false;//重置数据判断
23          setTimeout(function(){
24              this.getData();
25              this.$refs.myscroller.finishPullToRefresh();//刷新完毕关闭刷新的转圈圈
26          }.bind(this),1700)
27      },
28   // 上拉加载
29    infinite(done){
30        if(this.noDate){
31               this.$refs.myscroller.finishInfinite(true);//这个方法是不让它加载了,显示“没有更多数据”,要不然会一直转圈圈
32       }else{
33            setTimeout(() => {
34                  this.page++;//下拉一次页数+1
35                  this.getData();
36                  done();//进行下一次加载操作
37            }, 1500);
38      }
39    },
40 }

 

5.因为刚开始要有数据,最后在mounted里面调用一下this.getData();就ok了!!!
 
 
posted @ 2018-11-01 10:42  燃烧吧大脑!!!  阅读(7371)  评论(1编辑  收藏  举报