纪念浪费一个下午的时间踩下的坑

2018-11-19  本文已影响0人  clumsy钧

最近一直在写vue代码,好久没有进行知识总结了,想着写点什么,正好踩了一个坑,浪费了一个下午的时间填了一下

移动端实现滚动加载

环境准备(默认已将所有引入的组件安装)

import Vue from 'vue'
import axios from 'axios'
import url from 'js/api.js'
import { InfiniteScroll } from 'mint-ui';
Vue.use(InfiniteScroll);

vue实例

new Vue({
    el:'.container',
    data:{
        searchData:null,//数据存储
        pageNum:1,
        pageSize:8,
        isAllloaded:false,//判断数据是否全部加载完毕
         onloading:false//当判断为true时 执行加载数据的方法
    }

js逻辑

 getSearchlist(){
            this.onloading=true  //函数执行时先设置为true才能进行下面
            if(this.isAllloaded) return // 若数据加载完毕后择直接返回
            axios.get(url.searchlist,{
                params:{
                    keyword,
                    id,
                    pageNum:this.pageNum,
                    pageSize:this.pageSize,         
                }
            }).then(res=>{      
                console.log(this.pageSize,this.pageNum)
                let currentLists=res.data.lists   //声明一个当前列表
                
                if(currentLists.length<this.pageSize ){ //如果当前列表的列数小于一页所拥有的数即为数据加载完毕
                    this.isAllloaded=true
                }
                if(this.searchData){  //如果已经有数据加载到searchData上
                    
                    this.searchData=this.searchData.concat(currentLists)//把当前页继续拼接到searchData上
                }else{
                    this.searchData=currentLists  //否则将当前页赋值给searchData 即 第一次加载数据
                }      
                this.pageNum++ //页数增加一页
                 this.onloading=false //  数据停止加载        
            }).catch(err=>{
                console.log(err)
            })
        }

以上是业务逻辑实现,下面说一下我踩到的坑

mint-ui中的InfiniteScroll在页面中的引入方法

<ul
  v-infinite-scroll="getSearchlist"
  infinite-scroll-disabled="onloading"
  infinite-scroll-distance="10">
  <li v-for="item in searchData">{{ item }}</li>
</ul>

该ul的父元素的高度必须给定,否则onloading无法从true 变为false,
择数据会不断地加载下去

上一篇下一篇

猜你喜欢

热点阅读