基于 Vue.js 的移动端组件库mint-ui实现无限滚动加载更多

<p>经过屡次爬坑,发现了这些监听滚动来加载更多的组件的共同点,</p> <p>由于这些加载更多的方法是绑定在须要加载更多的内容的元素上的,</p> <p>因此是进入页面则直接触发一次,当监听到滚动事件以后,继续加载更多,</p> <p>因此对于无限滚动加载不须要写首次载入列表的函数,</p> <p>代码以下:</p>html

html:

//父组件

&lt;div v-infinite-scroll="loadMore" infinite-scroll-disabled="loading" infinite-scroll-distance="1000"&gt;
          &lt;LifeLists :loadingTextBtn="loadingTextBtn" :loadingText="loadingText" :loadingComplete="loadingComplete" :lifeList="lifeList"&gt;&lt;/LifeLists&gt;
&lt;/div&gt;

//LifeLists组件:

&lt;LifeListItem :lists="lifeList"&gt;&lt;/LifeListItem&gt;
        &lt;div class="loading-text" v-show="{loadingTextBtn:true}"&gt;
          &lt;span v-text="loadingText"&gt;&lt;/span&gt;
          &lt;mt-spinner v-if="(loadingComplete==false)" type="snake" :size="16"&gt;&lt;/mt-spinner&gt;
&lt;/div&gt;

//LifeListItem组件:

&lt;div id="lifeListItemBox"&gt;
&lt;router-link v-for="(item,index) in lists" :to="{name:'lifeDetails',params:{id:item.id}}" :key="index"&gt;
          &lt;div class="lifeListItem1" v-if="(item.status=='online')"&gt;
            &lt;div v-if="(item.hasPrice==true)"&gt;
              &lt;div class="title1"&gt;{{item.title}}&lt;/div&gt;
              &lt;div class="price"&gt;
                &lt;b class="now"&gt;&lt;span class="unit"&gt;{{item.monetaryUnit}}&lt;/span&gt;{{item.price}}&lt;/b&gt;
              &lt;/div&gt;
            &lt;/div&gt;
            &lt;div v-else class="title2"&gt;{{item.title}}&lt;/div&gt;
            &lt;div class="info"&gt;
              发布于{{formatTime(item.createAt)}}
              &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
              {{item.countryName}} {{item.cityName}}
            &lt;/div&gt;
            &lt;div class="imageList"&gt;
              &lt;img :src="img" alt="" v-for="(img,index) in item.photos"&gt;
            &lt;/div&gt;
            &lt;div class="content"&gt;{{item.detail}}&lt;/div&gt;
            &lt;div class="listBar"&gt;
              &lt;div class="iconBox"&gt;
                &lt;svg class="icon icon-dianzan" aria-hidden="true"&gt;
                  &lt;use xlink:href="#icon-dianzan"&gt;&lt;/use&gt;
                &lt;/svg&gt;
                {{item.like}}
              &lt;/div&gt;
              &lt;div class="iconBox"&gt;
                &lt;svg class="icon icon-pinglun2" aria-hidden="true"&gt;
                  &lt;use xlink:href="#icon-pinglun2"&gt;&lt;/use&gt;
                &lt;/svg&gt;
                {{item.commentCount}}
              &lt;/div&gt;
            &lt;/div&gt;
          &lt;/div&gt;
        &lt;/router-link&gt;
&lt;/div&gt;
vue.js

//data:

        page:0,
        size:10,
        loadingTextBtn:false,
        loadingText:"努力加载中",
        loadingComplete:false,
        refreshComplete:false,
        city:"",
        country:""
//methods:

loadMore() {
        this.loading = true;
        this.loadingTextBtn=true;
        if(parseInt(this.page)==0){
          this.$store.dispatch('loadMoreLifeList',{city:"纽约",country:"美国",category:"",page:this.page,size:this.size});
          this.page++;
        }else if(parseInt(this.page)&gt;0&amp;&amp;parseInt(this.page)&lt;parseInt(this.totalPages)){
          setTimeout(() =&gt; {
  //            this.$store.dispatch('loadMoreLifeList',{city:this.city,country:this.country,category:"",page:this.page,size:this.size})
              this.$store.dispatch('loadMoreLifeList',{city:"纽约",country:"美国",category:"",page:this.page,size:this.size});
              this.page++;
          }, 1000);
        }else{
          this.loadingText="已所有加载完成";
          this.loadingComplete=true;
          this.loading = false;
        }
      },

<p>这里重要的是判断,当当前页面为0的时候,即第一页的时候,不须要setTimeout定时器,直接请求加载,当加载更多的时候能够加个定时器。</p> <p>网上找到不少mint-ui 的loadmore组件来实现上拉加载更多,因为上拉触发相应的加载更多事件,因此当进入页面的时候应该不会自动载入数据,则这里能够加一个获取第一页数据的函数。</p>vue

原文地址:http://www.javashuo.com/article/p-dligwotu-gp.htmlsegmentfault

相关文章
相关标签/搜索