Vue mint ui用在消息頁面上拉加載下拉刷新loadmore 標記


  之前總結過一個頁面存在多個下拉加載的處理方式,今天再來說一下在消息頁面的上拉加載和下拉刷新,基本上每個app都會有消息頁面,會遇到這個需求

  需求:每次加載十條數據,上拉加載下拉刷新,並且沒有點擊查看過的新消息前面會帶着紅點標記,點擊查看過后紅點消失

  方法:

  先引入import {Loadmore } from 'mint-ui';

  HTML:

  <mt-loadmore :top-method="loadTop"
    :bottom-method="loadBottom"
    :bottom-all-loaded="allLoaded"
    ref="loadmore">
    <ul class="ul-box starth" id="ul-box">
      <li class="li-box" v-for="(item,index) in Data" :key="'list'+index" @click="goto_detail(item)">
        <span class="mark"></span>
        <div class="div-box">
          <p class="type">{{item.title}}</p>
        </div>
      </li>
    </ul>
  </mt-loadmore>
 
  JavaScript:
    
  export default {
       data() {
         return {
      griddata:[], //每次加載出來的新數據
      Data:[],  //每次加載累加后的總數據
      allLoaded: false,   //若為真,則  bottomMethod 不會被再次觸發
      num:0,  //num為0時表示刷新或第一次加載,每加載一次增加1,刷新時默認為0
      readList:[],  //紅點標記
          }
       },
        methods:{
    goto_detail(payload){  //跳轉到詳情頁
      this.$router.push({path:'/detail'})  
    },
    loadTop() {  //下拉刷新
      this.num=0;
      this.update(0,'top');
    },
    loadBottom() {  //上拉加載        
      this.num+=1;
                   let offset = this.num*10  //offset為分頁偏移量,這里是每次加載增加十條數據
      this.update(offset,'bottom');
    },
    update(type){  //每次觸發上拉加載或下拉刷新時觸發的數據接口
      let param = {
        offset: offset,
        number:10,  //每頁多少條數據
      }
      news(param).then((ret) => {
        if(ret.status_code==200){
          if(offset==0){  //如果偏移量為0說明是下拉刷新所以Data為剛加載出來的數據
            this.Data=ret.dataInfo
                                 }else{  //偏移量大於0,說明為上拉加載,Data為前面鎖加載出來數據的累加
             this.griddata=ret.dataInfo
                                      let len=this.griddata.length
                                      for(let i=0;i<len;i++){
                                          this.Data.push(this.griddata[i])  //將新數據push到Data中
                                      }
                                 }
          let read = ''  //read為接口獲取的數據,為是否已讀的標記,當為0時未讀,為1時已讀
          this.readList=[]  //新數組,放所有加載出數據的read值
          for(let i=0;i<this.Data.length;i++){
            this.readList.push(this.Data[i].read);
          }
        }
        //通過傳過來的type值不同分辨上拉加載或下拉刷新
        if(type=='top'){  
          this.$refs.loadmore.onTopLoaded();
        }else if(type=='bottom'){
          this.$refs.loadmore.onBottomLoaded();
        }
 
      })
    }
        },  
  updated(){  //只要數據變化就會判斷一次數據是否已讀過,判斷標記的顯隱
    let oSpan=document.getElementById("ul-box").getElementsByTagName("span");
    for(let i=0;i<this.readList.length;i++){
      if(this.readList[i]==0){
        oSpan[i].className='mark is-red'
      }else{
        oSpan[i].className='mark'
      }
    }
  },
  created(){  //打開頁面首先自動獲取一次數據
    let param = {
      offset: 0,  //打開頁面相當於初次加載
      number:10,  //每頁多少條數據
    }
    news(param).then((ret) => {
      if(ret.status_code==200){
        this.Data=ret.dataInfo
        let read = ''  //read為接口獲取的數據,為是否已讀的標記,當為0時未讀,為1時已讀
        this.readList=[]  //新數組,放所有加載出數據的read值
        for(let i=0;i<this.Data.length;i++){
          this.readList.push(this.Data[i].read);
        }
      }
    })
   }   
    }
總結:最好不要給ul-box設置固定高度,這樣會上拉加載出現bug,可以多嘗試一下,自己寫的代碼,如有其他問題或者更好的解決方法歡迎交流
   關於文中一些具體方法的解釋在另一篇文中有提及,’ Vue-上拉加載與下拉刷新(mint-ui:loadmore)一個頁面使用多個上拉加載后沖突問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM