• LinUI学习10 使用Pagaing实现分页查询


    LinUI学习10 使用Pagaing实现分页查询

    一、在utils文件加下新建paging.js文件

    二、编写paging.js

      1、首先我们需要引入之前封装好的http公用请求(详情参照前面的笔记)

    const {
      Http
    } = require("./http")

      2、需要明确封装的paging需要 不关心细节、实例化、保存状态

      3、我们需要一个锁来控制请求,进行防抖截流。

      4、完整代码如下

    const {
      Http
    } = require("./http")
    class Paging {
    
      start
      count
      req
      locker = false
      url
      moreData = true
      accumulator = []
      constructor(req, count = 10, start = 0) {
        this.start = start
        this.count = count
        this.req = req
        this.url = req.url
      }
      async getMoreData() {
        if (!this.moreData) {
          return
        }
        if (!this._getLocker()) {
          return
        }
        const data = await this._actualGetData()
        this._releaseLocker()
        return data
      }
    
      async _actualGetData() {
        const req = this._getCurrentReq()
        let paging = await Http.request(req)
        if (!paging) {
          return null
        }
        if (paging.total === 0) { //一条数据都没有
          return {
            empty: true,
            items: [], //当前请求回的数据
            moreData: false,
            accumulator: [] //累加历史请求的数据
          }
        }
        this.moreData = Paging._moreData(paging.total_Page, paging.page)
        if (this.moreData) {
          this.start += this.count
        }
        this._accumulate(paging.items)
        return {
          empty: false,
          items: paging.items,
          moreData: this.moreData,
          accumulator: this.accumulator
        }
      }
      static _moreData(totalPage, pageNum) {
        return pageNum < totalPage - 1
      }
    
      //累加历史请求的数据
      _accumulate(items) {
        this.accumulator = this.accumulator.concat(items) // 合并数组
      }
    
    
      // 获取当前的请求对象
      _getCurrentReq() {
        let url = this.url
        const params = `start=${this.start}&count=${this.count}`
    
        // url=v1/spu/latest + '?'+params
        // url=v1/spu/latest?other +'&'+params
        // 判断url内带不带问号
        if (url.indexOf('?') !== -1) {
          url += '&' + params
        } else {
          url += '?' + params
        }
        this.req.url = url
        return this.req
      }
    
    
      _getLocker() {  //查看锁的状态
        if (this.locker) {
          return false
        }
        this.locker = true
        return true
      }
    
    
      _releaseLocker() {  //复位
        this.locker = false
      }
    }
    export {
      Paging
    }

    三、使用paging.js

      1、在model文件夹下新建suppaging.js 编写代码如下

    const {
      Paging
    } = require("../utils/paging");
    class SpuPaging {
      static getLatestPaging() {
        return new Paging({
          url: `spu/latest`
        }, 3, 0)
    
      }
    }
    export {
      SpuPaging
    }

    四、使用suppaging.js

    示例:在home.js中使用

      onLoad: async function (options) {
        this.initBottomSpuList()
      },
    
      async initBottomSpuList(){
        const paging = await SpuPaging.getLatestPaging()
        const data = await paging.getMoreData()
        if(!data){
          return
        }
      },

    这样就可以使用分页查询了

        

  • 相关阅读:
    [原]在Solaris 10/09上静默安装和升级Oracle 10g和Oracle 11g(一)
    [原]不祥的CPU——Alpha
    [原]单核、双核、四核、八核、十六核......(更新于2010年7月11日,增加了32核的截图)
    [原]记一次处理Oracle死会话的过程
    [原]记一次使用flashback恢复数据,警惕自己不要浮躁,还是太嫩了
    在Solaris中如何解开tar.gz的文件
    说说Oracle的rowid
    [原]SQL解决“俯瞰金字塔”矩阵
    百度搜索支持手写输入法,我爸妈终于可以用上搜索引擎了
    [原] 在Solaris 10/09上静默安装和升级Oracle 10g和Oracle 11g(四)
  • 原文地址:https://www.cnblogs.com/mrkr/p/14305585.html
Copyright © 2020-2023  润新知