小程序list分页加载组件和音频API使用

效果图
2.gif
场景

使用小程序的时候经常会遇到一些分页加载展示的功能,都是list列表展示,只不过是里面的内容不同;然后每次有新的list都要把item遍历,然后又得加上底部的加载更多,加载完成等copy一份,操作十分繁琐;由此笔者进行了简单的封装,具体内容如下。

编写一个common-list组件

common-list.js:主要向外部提供两个属性list和loadMore;list用来存放需要展示的列表数组;loadMore用来控制页面加载更多的展示和关闭,通过给loadMore的enableLoadMore和haseMore来控制;然后向外部提供一个回调方法onClickListItem,通过该方法把item的所有点击事件回调到调用该common-list组件的组件或者页面,具体回调的值待会讲解item组件的时候再来分析;

"use strict";
Component({
    properties: {
        list: {
            type: Array,
            value: [],
            observer: "onListChange"
        },
        loadMore: {
            type: Object,
            value: {
                enableLoadMore: false,
                hasMore: true,
            },
            observer: "onLoadMoreChange"
        },
        
    },


    data: {
        enableLoadMore: false,
        hasMore: true,
    },


    methods: {

        onListChange: function onListChange() {
            this.setData({
                list: this.data.list,
            });
        },

        /**
         * list里面item内部点击
         * 可通过e.detail.clickEvent.target知道是Item内部哪个子控件自身点击事件
         * @param {*} e 
         */
        onClickItem: function onClickItem(e) {
            // console.log(e);
            this.triggerEvent('onClickListItem', e.detail);
        },
        
        /**
         * 加载更多控件更新
         */
        onLoadMoreChange: function onLoadMoreChange() {
            this.setData({
                enableLoadMore: this.data.loadMore.enableLoadMore,
                hasMore: this.data.loadMore.hasMore,
            });
        },

    }
});

common-list.json:componentGenerics用来存在抽象节点的声明,比如我们这里声明了一个抽象节点list-item,list-item在common-list.wxml中代替外部传进来的item,有些类似slot;外部应用common-list的时候通过 generic:list-item="record-item" 给list-item赋值,record-item这里是自定义的item组件;
该快理解模糊的话可以查看微信官方对抽象节点的描写文档:https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/generics.html

{
    "component": true,
    "componentGenerics": {
        "list-item": true
    }
}
//引用
 

common-list.wxml:主要就是遍历我们的item和添加加载更多样式,这里遍历的item就是我们的抽象节点list-item,然后把相应的值和索引传进去,再绑定一个队对外部的点击事件