1. 程式人生 > >vue載入更多

vue載入更多

//很low的載入更多,僅供自己參考,如若有更好的歡迎提出

1、載入更多在很多評論、列表中有廣泛應用,思路就是每頁10條的話,滾到底部後觸發一個事件,在mounted中寫上事件

                    window.addEventListener('scroll', this.handleScroll),其中this.handleScroll指的是methods中的一個方法,

2、有了滾到底部的方法後,就需要搞清楚如何實現分頁或者說是載入跟多,後臺是這樣的,如果有32條資料,每頁十條則有四頁,當你傳參為1時,返回前十條,2時返回11~20條,以此類推,有點思路就是要動態改變傳參,換過來想就是滾到底部時讓一個引數++的方式動態改變傳的引數。

3、此時需要注意兩個問題,到底是合併兩個陣列還是等號賦值陣列,問題情境(1)當資料庫一共有八條資料, 但是已經到底部,假設list是你定義的空陣列,而data是返回的陣列。資料不到十條,你用list = data完全沒有問題,而要是資料較多,當傳參變化時你用等號,當前的list永遠就等於後臺返回的,而後臺返回的資料總是一部分一部分的。(2)如果你用陣列的concat()方法,那麼當資料大於十條時完全沒有問題,而小於十條時就出現前八條 16 24這種樣子,因為總是返回的是這八條資料,又合併bug不斷。理想的方法是分情況用concat

html部分

<div class="moreinfo" v-if="flag">
                    <span>載入中</span>
                    <a class="active">
                        <span class="mui-spinner"></span>
                    </a>
     </div>
       <div class="noinfo" v-if="noinfo">已載入全部資料</div>

data部分:

data: {
                    num: 1,
                    flag: false,
                    noinfo: false,
                    totalPage: '',
                    temp:false,
                   
                },

handleScroll: function() {
                        var that = this
                        if($(window).scrollTop() >= $(document).height() - $(window).height()) {
                            that.temp = false            //temp決定了是用 = 還是用cancat
                            that.flag = true           //flag決定是否顯示載入中字樣
                            that.num ++             //傳入後端的頁數
                            if(that.totalPage<that.num){ //totalPage是後端返回來的總頁數
                                //即使沒有發起請求也要有載入的動作
                                setTimeout(function(){
                                    that.noinfo = true   //noinfo 決定是否顯示“已載入全部”
                                    that.flag =false
                                 },500)
                                 that.noinfo =false
                                return
                            }else{
                                that.temp = true
                                that.jydetail() //後端請求的方法
                            }
                        }

                    },