小程序自定义组件:下拉刷新、上拉加载组件、搜
组件名 | 功能说明 |
---|---|
scroll | 下拉刷新、上拉加载 |
search | 搜索组件(含记忆搜索历史功能) |
picker-region | 省+市选择组件(解决picker省市区选择器不能只选择省市2级问题) |
picker-range-month | 年月区间选择 |
在页面或组件中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组件省市区选择器不能只选择省市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 | 在选择器界面点击确认按钮触发 |
时间区间选择组件
在页面或组件中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、网站不提供资料下载,如需下载请到原作者页面进行下载。