基於 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

相關文章
相關標籤/搜索