之前总结过一个页面存在多个下拉加载的处理方式,今天再来说一下在消息页面的上拉加载和下拉刷新,基本上每个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. 排序算法Java实现(归并排序)

    算法描述:对于给定的一组记录,首先将每两个相邻的长度为1的子序列进行归并,得到 n/2(向上取整)个长度为2或1的有序子序列,再将其两两归并,反复执行此过程,直到得到一个有序序列. package s ...

  2. 国内可用的Internet时间同步服务器地址(NTP时间服务器)

    不知道什么鬼我这系统自带的Internet时间同步服务器地址居然不可用,终端ping系统自带服务器两个居然都不通???难道时间服务器也和谐么? 好在阿里云提供了7个NTP时间服务器也就是Interne ...

  3. HA集群heartbeat配置--Nginx

    HA即(high available)高可用,又被叫做双机热备,用于关键性业务.简单理解就是,两台机器A和B,正常是A提供服务,B待命限制,当A宕机或服务宕掉,会切换至B机器继续提供服务.常用实现高可 ...

  4. sqlite语句主页

    因为现在android手机用sqlite数据,但是sql语句很多和sqlserver不同..所以还是把官网记下以便开发:http://www.sqlite.org/lang.html

  5. 实现Windows程序的数据绑定

    1.创建DataSet对象 语法: DataSet  数据集对象  =new  DataSet("数据集的名称字符串"); 语法中的参数是数据集的名称字符串,可以有,也可以没有.如 ...

  6. sphinx的安装

    1.下载sphinx 没想到sphinx3解压后即可: wget http://sphinxsearch.com/files/sphinx-3.0.2-2592786-linux-amd64.tar. ...

  7. 通过运行一个tomcat容器来记录下初学docker常用的几个命令---容器篇

    1.查看容器列表 显示正在运行的容器: [root@localhost HMK]# docker ps 显示所有容器,包括未运行的: [root@localhost HMK]# docker ps - ...

  8. CoreAnimation注意事项

    最近调查的一个bug和内存泄露都和CoreAnimation有关,因此谈一下使用CoreAnimation需要注意的几个问题 CAAnimation的delegate属性是retain的,这个设计确实 ...

  9. 随机ID添加

    var http = require("http"); var fs = require("fs"); var server = http.createServ ...

  10. day-6 机器学习概念及应用

    学习玩Python基础语法,今天开始进行机器学习,首先了解下机器学习和深度学习的一些基本概念和术语: 1.  机器学习概念及应用 2.  深度学习概念及应用 3.  机器学习基本术语及举例 4.  机 ...