之前总结过一个页面存在多个下拉加载的处理方式,今天再来说一下在消息页面的上拉加载和下拉刷新,基本上每个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)一个页面使用多个上拉加载后冲突问题

Vue mint ui用在消息页面上拉加载下拉刷新loadmore 标记的更多相关文章

  1. APICloud上啦加载下拉刷新模块

    apicloud有自带的上啦加载下拉刷新,当让也可以用第三方或者在模块库里面找一个使用 一.下拉刷新,一下代码写在 apiready = function (){} 里面 apiready = fun ...

  2. 微信小程序上拉加载下拉刷新

    微信小程序实现上拉加载下拉刷新 使用小程序默认提供方法. (1). 在xxx.json 中开启下拉刷新,需要设置backgroundColor,或者是backgroundTextStyle ,因为加载 ...

  3. 上拉加载下拉刷新控件WaterRefreshLoadMoreView

    上拉加载下拉刷新控件WaterRefreshLoadMoreView 效果: 源码: // // SRSlimeView // @author SR // Modified by JunHan on ...

  4. RecyclerView 上拉加载下拉刷新

    RecyclerView 上拉加载下拉刷新 <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/teach_s ...

  5. zepto.js + iscroll.js上拉加载 下拉加载的 移动端 新闻列表页面

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...

  6. Flutter上拉加载下拉刷新---flutter_easyrefresh

    前言 Flutter默认不支持上拉加载,下拉刷新也仅仅支持Material的一种样式.Android开发使用过SmartRefreshLayout的小伙伴都知道这是一个强大的刷新UI库,集成了很多出色 ...

  7. 利用iscroll实现上拉加载下拉刷新

    1.首先引用isScroll插件 说明:页面加载时初始化isScroll,然后调用pullDownAction()和pullUpAction(),每次切换tab时,只需要对pullDownAction ...

  8. js上拉加载下拉刷新

    写在前边: 工作需要,使用ajax在原来的列表下边使用ajax请求后台数据,拼接在列表最下边,在github转了好久,发现了一个bug极多的js刷新插件,尝试了一个下午,就在快放弃的时候,发现下边有留 ...

  9. 基于better-scroll封装一个上拉加载下拉刷新组件

    1.起因 上拉加载和下拉刷新在移动端项目中是很常见的需求,遂自己便基于better-scroll封装了一个下拉刷新上拉加载组件. 2.过程 better-scroll是目前比较好用的开源滚动库,提供很 ...

随机推荐

  1. 详解小白利用eclipse+CDT+MinGW搭建C++开发环境

    安装JDK.安装Eclipse     2.打开Eclipse 找到“help”下的“Eclipse marketplace” 如图:    3.选择相应的C插件: 因为安装过所以显示installe ...

  2. 用js编解码base64

    以下是编码和解码的方法 function Base64() { // private property _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef ...

  3. Docker + webpack 打包前端项目

    码云代码地址: https://gitee.com/caonimashi/docker_deployment_front_end    构建基础镜像: 1.下载一个 Apline Linux 操作系统 ...

  4. zabbix自定义key监控memcache状态及其他服务进程

    一.在客户端 1.到/usr/loca/zabbix/conf/zabbix_agentd.conf里添加         UserParameter=memcached_stats[*],(echo ...

  5. Spring Boot 引入自定义yml

    喜欢yml配置文件格式的人性化,也喜欢properties配置文件管理方式的人性化, 那么下面我们就来看一下 yml 是如何配置和使用类似properties管理方式的人性化. 配置文件 设置Spri ...

  6. Algorithm --> 全排列

    1.算法简述 简单地说:全排列就是从第一个数字起每个数分别与它后面的数字交换. E.g:E = (a , b , c),则 prem(E)= a.perm(b,c)+ b.perm(a,c)+ c.p ...

  7. iOS scrollView中嵌套多个tabeleView处理方案

    项目中经常会有这样的需求,scrollView有个头部,当scrollView滚动的时候头部也跟着滚动,同时头部还有一个tab会锁定在某个位置,scrollView中可以放很多不同的view,这些vi ...

  8. 新手立体四子棋AI教程(2)——价值评估函数

    上一篇我们完成了整个程序的基础框架,那么在讲到真正的搜索算法前,我们先来看看五子棋如何评估当前局势,以及如何计算某个位置的价值. 一.五子棋 在五子棋中,包括成五,活三,活二等定势,下图为山东师范大学 ...

  9. 有关java中的hashCode问题

    1. HashSet集合存储数据的结构(哈希表) 1.1 什么是哈希表? 哈希表底层使用的也是数组机制,数组中也存放对象,而这些对象往数组中存放时的位置比较特殊,当需要把这些对象给数组中存放时,那么会 ...

  10. python IDLE中反斜杠显示为人民币符号¥的解决办法

    改换英文字体即可