0.0.17 • Published 4 years ago

@retailwe/ui-load-more v0.0.17

Weekly downloads
-
License
-
Repository
-
Last release
4 years ago

load-more 加载更多

引入

全局引入,在miniprogram根目录下的app.json中配置,局部引入,在需要引入的页面或组件的index.json中配置。

// app.json 或 index.json
"usingComponents": {
  "wr-load-more": "@retailwe/ui-load-more/index"
}

代码演示

基础用法

<view style="padding: 20rpx;">item列表👇</view>
<view style="padding: 0 40rpx;">
  <view style="padding: 30rpx; margin-top: 20rpx; background-color: white;"
    wx:for="{{list}}" wx:key="index"
  >{{item}}</view>
  <wr-load-more
    list-is-empty="{{!list.length}}"
    status="{{dataLoading}}"
    bindretry="onReTry">
  </wr-load-more>
</view>
Page({
  page: {
    num: 1,
    size: 10,
  },

  data: {
    dataLoading: 0,
    list: [] as string[],
  },

  onLoad() {
    this.init();
  },

  onReachBottom() {
    this.loadMore();
  },

  onReTry() {
    this.data.dataLoading = 0;
    this.loadMore();
  },

  init() {
    this.page = {
      num: 1,
      size: 10,
    };
    this.data.list = [];
    return this.loadMore();
  },

  loadMore() {
    if (this.data.dataLoading !== 0) {
      return;
    }
    this.setData({ dataLoading: 1 });
    return this.getData({
      pageNum: this.page.num,
      pageSize: this.page.size,
    })
      .then(res => {
        this.page.num++;
        const { data, pageCount } = res;
        this.setData({
          list: this.data.list.concat(data),
          dataLoading: this.page.num < pageCount ? 0 : 2,
        });
      })
      .catch(err => {
        this.setData({ dataLoading: 3 });
        Promise.reject(err);
      });
  },

  failed: false,
  getData({
    pageNum,
    pageSize,
  }): Promise<{ pageCount: number; data: string[] }> {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        if (pageNum === 2 && !this.failed) {
          // 故意制造一次失败
          this.failed = true;
          return reject();
        }
        let data: string[] = [];
        if (pageNum <= 3) {
          data = Array.from(
            new Array(pageSize),
            (_v, i) => 'item ' + ((pageNum - 1) * pageSize + i + 1),
          );
        }
        resolve({
          data,
          pageCount: data.length,
        });
      }, 1000);
    });
  },
});

自定义文案、颜色

<view style="padding: 0 40rpx;">
  <view style="padding: 30rpx; margin-top: 20rpx; background-color: white;"
    wx:for="{{list}}" wx:key="index"
  >{{item}}</view>
  <wr-load-more
    list-is-empty="{{!list.length}}"
    status="{{dataLoading}}"
    color="red"
    loading-text="还在加载, 请等待..."
    no-more-text="我是有底线的"
    bindretry="onReTry">
  ></wr-load-more>
</view>

通过slot传入列表/页面空态,让load-more来控制空态的显示/隐藏

<!-- 列表部分 -->
<view style="padding: 30rpx; margin-top: 20rpx; background-color: white;"
  wx:for="{{list}}" wx:key="index"
>{{item}}</view>
<!-- 加载 -->
<wr-load-more
  list-is-empty="{{!serviceListRaw.length}}"
  status="{{listLoading}}"
  bindretry="onReTryLoad">
  <!-- 空态 -->
  <view class="empty-wrapper" slot="empty">
    <wr-empty
      wr-class="empty"
      size="240rpx"
      textColor="#999999"
      textSize="28rpx"
      src="{{emptyImg}}"
    >暂无退款或售后申请记录</wr-empty>
  </view>  
</wr-load-more>

API

loading-content Props

参数说明类型默认值版本
status状态,0-占位无内容,1-正在加载,2-已全部加载,3-加载失败number0-
loadingText1-正在加载的文案string加载中...-
noMoreText2-已全部加载的文案string没有更多了-
failedText3-加载失败的文案string加载失败,点击重试-
color颜色,包括字体、线条、loadingstring#BBBBBB-
failedColor2-加载失败的字体颜色string#FA550F-
sizeloading效果sizestring40rpx-
loadingBackgroundColorloading效果的背景色,请务必配置string#F5F5F5-
listIsEmpty列表是否为空,组件会根据该值自动决定是否需要占位booleanfalse-

注意 listIsEmptyfalse并且status0的时候仍会占位,防止拖到列表底部loading看不到或只看到一半。

slot

名称说明
empty传入空态要渲染的内容

外部样式类

类名说明
wr-class根节点样式类
wr-class--no-morenoMore的样式类
0.0.17

4 years ago

0.0.16

4 years ago

0.0.15

4 years ago

0.0.14

4 years ago

0.0.13

4 years ago

0.0.12

4 years ago

0.0.11

4 years ago

0.0.10

4 years ago

0.0.9

4 years ago

0.0.8

4 years ago

0.0.7-beta.1

4 years ago