小程序自定义组件:下拉刷新、上拉加载组件、搜

小程序组件
组件名 功能说明
scroll 下拉刷新、上拉加载
search 搜索组件(含记忆搜索历史功能)
picker-region 省+市选择组件(解决picker省市区选择器不能只选择省市2级问题)
picker-range-month 年月区间选择
scroll使用说明

在页面或组件中json文件的usingComponents下引入scroll

usingComponents:{ /*假设组件放在这个路径*/ "scroll":'/lib/components/scroll/index' }

Page({ //下拉刷新 onPullDown(){ //TODO数据方法 }, //上拉加载更多 onPullUp(){ //TODO数据方法 } })

在template中使用

<scroll id="scroll" open="all" bind:pulldown="onPullDown" bind:pullup="onPullUp"> <!-- 这里写你的列表代码 --> </scroll>

参数名 类型 备注
open up / down / all 开启哪个方向的事件(up:下拉事件,down:上拉事件,all:两者都开启)
id string 通过this.selectComponent('#scroll')来获取组件对象(下拉刷新或上拉加载处理时调用组件对象的startLoad()和stopLoad()来显示和隐藏loading)
bind:pulldown function 下拉事件
bind:pullup function 上拉事件

组件方法

方法名 备注
stop() 关闭下拉刷新Loading
startLoad() 显示上拉Loading(也可以在页面第一个加载数据时调用)
stopLoad() 关闭上拉Loading,配合startLoad()使用
noData() 在列表底部显示暂无更多内容(注意该方法只是显示暂无更多内容,是否可以上拉需要自己在上拉事件中处理)

组件监听事件(事件前面记得加bind)

事件名称 返回值 备注
scroll 同scroll-view的bindscroll 返回当前scroll的混动条对象
pulldown null 触发下拉刷新监听
pullup null 触发上拉加载更多监听

样例代码仅供参考

let component = null; Page({ data:{ list: [] }, //页面初始化 onLoad(){ //获取组件对象 component = this.selectComponent('#scroll'); //显示loading component.startLoad(); //请求第一页数据 this.loadData(true).then(() => { //数据请求完成后需要调用该方法结束loading component.stopLoad(); }); }, //加载数据 loadData:function(reset = false) { ... }, //下拉刷新 onPullDown:function() { //请求第一页数据 this.loadData(true).then(() => { //数据请求完成后需要调用该方法结束loading component.stop(); }); }, //上拉加载更多 onPullUp:function() { //显示loading component.startLoad(); //加载下一页数据 this.loadData().then(() => { //数据请求完成后需要调用该方法结束loading component.stopLoad(); }); } }) search使用说明

在页面或组件中json文件的usingComponents下引入search

usingComponents:{ /*假设组件放在这个路径*/ "search":'/lib/components/search/index' }

Page({ data:{ //组件对象 searchElem:null }, onLoad(){ //获取组件对象实例 const searchElem = this.selectComponent('#search'); this.setData({searchElem}); }, //打开搜索栏 openSearch(){ //可直接调用显示搜索栏或传参调用 //this.searchElem.show(); //传过去的参数会直接显示在打开的搜索界面输入框内 this.searchElem.show('司马光'); //TODO }, //搜索回调 onSearch({detail}){ let data = detail.value; //TODO } })

在template中使用

<search id="search" key="case-search" radius="36" placeholder="搜索名称" bind:search="onSearch" />

参数名 类型 备注
key string 搜索栏标识(作为保存历史搜索记录的唯一标识key,由于存储方式采用wx.setStorage来存储,请注意避免命名冲突)
id string 通过this.selectComponent('#search')来获取组件对象
radius number 搜索栏圆角(默认为10rpx)
placeholder string 搜索栏输入框默认显示的占位内容

组件方法

方法名 备注
show(value:string) 显示搜索栏
hide() 隐藏搜索栏(在bind:search中主动调用隐藏)

组件监听事件(事件前面记得加bind)

事件名称 返回值 备注
search event.detail.value 在搜索栏界面开始搜索就会触发,可在此监听里做一些校验,校验通过后再调用hide方法隐藏搜索栏
picker-region使用说明

该组件是为了解决picker组件省市区选择器不能只选择省市2级问题而设计

在页面或组件中json文件的usingComponents下引入picker-region

usingComponents:{ /*假设组件放在这个路径*/ "picker-region":'/lib/components/picker-region/index' }

//该数据也可用其他方式获取 import regions from './region-data' Page({ data:{ /** * 地区数据 */ regionList:[], //默认显示的地区(为空则显示第一项) region:[], }, onLoad(){ this.setData({regionList:regions}); }, //地区选择监听 onChange({detail}){ let values = detail.value;//选择的下标值,格式为:[0,0] let names = data.names;//选择的省市名称,格式为:['北京市','北京市'] //TODO } })

在template中使用

<picker-region regionList="{{regionList}}" value="{{region}}" containsAll bind:change="onChange"> <!-- 默认情况下点击组件内包含的内容就会显示选择器 --> <view>选择地区</view> </picker-region>

参数名 类型 备注
regionList Array 省市数据格式为[{"name":"北京市","city":[{"name":"北京市"}]},...]
id string 通过this.selectComponent('#组件id')来获取组件对象
value Array 设置当前选中value,格式为:['北京市','北京市']
containsAll boolean 是否包含所有省份、所有城市项,默认为false

组件方法

方法名 备注
setValue(array:string[]) 设置值,格式为:['北京市','北京市']
show() 可通过调用show来显示选择器
hide() 可通过调用hide来隐藏选择器

组件监听事件(事件前面记得加bind)

事件名称 返回值 备注
change event.detail.value 在选择器界面点击确认按钮触发
picker-range-month使用说明

时间区间选择组件

在页面或组件中json文件的usingComponents下引入picker-range-month

usingComponents:{ /*假设组件放在这个路径*/ "picker-range-month":'/lib/components/picker-range-month/index' }

//该数据也可用其他方式获取 Page({ data:{ /** * 默认设置的开始时间-结束时间,格式为:[开始年份, 开始月份, 结束年份, 结束月份] */ date:[2017, 5, 2018, 6], }, onLoad(){}, //地区选择监听 onChange({detail}){ let date = detail.value; date.start.year;//开始年份 date.start.month;//开始月份 date.end.year;//结束年份 date.end.month;//结束月份 //TODO } })

在template中使用

<picker-range-month bind:change="onChange" value="{{date}}"> <!-- 默认情况下点击组件内包含的内容就会显示选择器 --> <view class="name">选择日期区间</view> </picker-range-month>

参数名 类型 备注
id string 通过this.selectComponent('#组件id')来获取组件对象
value Array 设置当前选中value,格式为:[开始年份, 开始月份, 结束年份, 结束月份]
minYear number 最小年份,默认1900年
maxYear number 最大年份,默认2100年
errorMessage string 开始时间大于结束时间错误提示,默认为:开始时间不能大于结束时间

组件方法

方法名 备注
setValue(array:string[]) 设置值,格式为:[开始年份, 开始月份, 结束年份, 结束月份]
show() 可通过调用show来显示选择器
hide() 可通过调用hide来隐藏选择器

组件监听事件(事件前面记得加bind)

事件名称 返回值 备注
change event.detail.value 在选择器界面点击确认按钮触发

版权声明:

1、该文章(资料)来源于互联网公开信息,我方只是对该内容做点评,所分享的下载地址为原作者公开地址。
2、网站不提供资料下载,如需下载请到原作者页面进行下载。