代碼Github地址
一. 說(shuō)明
從底部彈起的滾動(dòng)選擇器,現(xiàn)支持五種選擇器棚唆,通過(guò)mode來(lái)區(qū)分暇赤,分別是普通選擇器,多列選擇器宵凌,時(shí)間選擇器鞋囊,日期選擇器,省市區(qū)選擇器瞎惫,默認(rèn)是普通選擇器溜腐。
1. 普通選擇器:mode = selector
屬性名 |
類(lèi)型 |
默認(rèn)值 |
說(shuō)明 |
range |
Array / Object Array |
[] |
range是該選擇器的選項(xiàng)內(nèi)容译株。mode為 普通選擇器 或 多列選擇器 時(shí),range有效挺益。 |
range-key |
String |
|
當(dāng) range 是一個(gè) Object Array 時(shí)歉糜,通過(guò) range-key 來(lái)指定 Object 中 key 的值作為選擇器顯示內(nèi)容 |
value |
Number |
0 |
表示選擇了 range數(shù)組 中的第幾個(gè)(下標(biāo)從 0 開(kāi)始) |
bindchange |
EventHandle |
|
滾動(dòng)選中時(shí)觸發(fā) change 事件,event.detail = {value: value} |
disabled |
Boolean |
false |
是否禁用 |
bindcancel |
EventHandle |
|
取消選擇或點(diǎn)遮罩層收起 picker 時(shí)觸發(fā) |
// wxml
<!-- 普通選擇器 -->
<view class="picker-container">
<text>普通選擇器(字符串?dāng)?shù)組數(shù)據(jù)):mode = selector</text>
<picker class="picker" mode="selector" range="{{array}}" value="{{index}}" bindchange="bindPickerChange" bindcancel="cancel">
<view class="picker">
當(dāng)前選擇:{{array[index]}}
</view>
</picker>
</view>
<view class="picker-container">
<text>普通選擇器(對(duì)象數(shù)組數(shù)據(jù)):mode = selector</text>
<picker class="picker" mode="selector" range="{{objectArray}}" range-key="name" value="{{index}}" bindchange="bindPickerChange">
<view class="picker">
當(dāng)前選擇:{{objectArray[index].name}}
</view>
</picker>
</view>
// wxss
.picker-container {
text-align: center;
margin-top: 20px;
background-color: yellow;
font-size: 40rpx;
}
.picker {
margin-left: 10%;
margin-right: 10%;
background-color: orange;
}
// js
data: {
// 普通選擇器
array: ['蘋(píng)果', '橘子', '香蕉', '西紅柿'], // 字符串?dāng)?shù)組
index: 1, // 默認(rèn)選中第幾行
objectArray: [ // 對(duì)象數(shù)組
{ id: 0, name: '蘋(píng)果' },
{ id: 1, name: '橘子' },
{ id: 2, name: '香蕉' },
{ id: 3, name: '西紅柿'}
],
}望众,
bindPickerChange: function (event) {
console.log('picker發(fā)送選擇改變匪补,攜帶值為', event.detail.value)
this.setData({
index: event.detail.value
})
},
cancel: function (event) {
console.log("取消了");
},
2. 普通選擇器:mode = multiSelector
屬性名 |
類(lèi)型 |
默認(rèn)值 |
說(shuō)明 |
range |
二維Array / 二維Object Array |
[] |
mode為 selector 或 multiSelector 時(shí),range 有效烂翰。二維數(shù)組夯缺,長(zhǎng)度表示多少列,數(shù)組的每項(xiàng)表示每列的數(shù)據(jù)甘耿,如[["a","b"], ["c","d"]]
|
range-key |
String |
|
當(dāng) range 是一個(gè) 二維Object Array 時(shí)踊兜,通過(guò) range-key 來(lái)指定 Object 中 key 的值作為選擇器顯示內(nèi)容 |
value |
Array |
[] |
value 每一項(xiàng)的值表示選擇了 range 對(duì)應(yīng)項(xiàng)中的第幾個(gè)(下標(biāo)從 0 開(kāi)始) |
bindchange |
EventHandle |
|
value 改變時(shí)觸發(fā) change 事件,event.detail = {value: value} |
bindcolumnchange |
EventHandle |
|
某一列的值改變時(shí)觸發(fā) columnchange 事件棵里,event.detail = {column: column, value: value}润文,column 的值表示改變了第幾列(下標(biāo)從0開(kāi)始),value 的值表示變更值的下標(biāo) |
bindcancel |
EventHandle |
|
取消選擇時(shí)觸發(fā) |
disabled |
Boolean |
false |
是否禁用 |
// wxml
<!-- 多列選擇器 -->
<view class="picker-container">
<text>多列選擇器(二維數(shù)組) :mode = multiSelector</text>
<picker class="picker" mode="multiSelector" range="{{multiArray}}" value="{{multiIndex}}" bindchange="multiBindchange">
<view class="picker">
當(dāng)前選擇:{{multiArray[0][multiIndex[0]]}}殿怜,{{multiArray[1][multiIndex[1]]}},{{multiArray[2][multiIndex[2]]}}
</view>
</picker>
</view>
// wxss
.picker-container {
text-align: center;
margin-top: 20px;
background-color: yellow;
font-size: 40rpx;
}
.picker {
margin-left: 10%;
margin-right: 10%;
background-color: orange;
}
// js
data: {
multiArray: [['無(wú)脊柱動(dòng)物', '脊柱動(dòng)物'], ['扁性動(dòng)物', '線形動(dòng)物', '環(huán)節(jié)動(dòng)物', '軟體動(dòng)物', '節(jié)肢動(dòng)物'], ['豬肉絳蟲(chóng)', '吸血蟲(chóng)']],
multiIndex: [0, 1, 2],
},
multiBindchange: function (event) {
console.log('picker發(fā)送選擇改變曙砂,攜帶值為', event.detail.value)
this.setData({
multiIndex: [event.detail.value[0], event.detail.value[1], event.detail.value[2]]
})
},
multiPickerColumnChange: function (e) {
console.log('修改的列為', e.detail.column, '头谜,值為', e.detail.value);
},
3. 時(shí)間選擇器:mode = time
屬性名 |
類(lèi)型 |
默認(rèn)值 |
說(shuō)明 |
value |
String |
|
表示選中的時(shí)間,格式為"hh:mm" |
start |
String |
|
表示有效時(shí)間范圍的開(kāi)始鸠澈,字符串格式為"hh:mm" |
end |
String |
|
表示有效時(shí)間范圍的結(jié)束柱告,字符串格式為"hh:mm" |
bindchange |
EventHandle |
|
value 改變時(shí)觸發(fā) change 事件,event.detail = {value: value} |
bindcancel |
EventHandle |
|
取消選擇時(shí)觸發(fā) |
disabled |
Boolean |
false |
是否禁用 |
// wxml
<!-- 時(shí)間選擇器 -->
<view class="picker-container">
<text>時(shí)間選擇器:mode = time</text>
<picker class="picker" mode="time" value="{{timeValue}}" start="{{start}}" end="{{end}}" bindchange="timeChange">
<view class="picker">
當(dāng)前選擇: {{timeValue}}
</view>
</picker>
</view>
// wxss
.picker-container {
text-align: center;
margin-top: 20px;
background-color: yellow;
font-size: 40rpx;
}
.picker {
margin-left: 10%;
margin-right: 10%;
background-color: orange;
}
// js
data: {
timeValue: "12:00", // 選中的時(shí)間
start: "00:00", // 開(kāi)始時(shí)間
end: "24:00",
},
timeChange: function (event) {
let time = event.detail.value;
console.log(event);
this.setData({
timeValue: time
});
},
4. 日期選擇器:mode = date
屬性名 |
類(lèi)型 |
默認(rèn)值 |
說(shuō)明 |
value |
String |
0 |
表示選中的日期笑陈,格式為"YYYY-MM-DD" |
start |
String |
|
表示有效日期范圍的開(kāi)始际度,字符串格式為"YYYY-MM-DD" |
end |
String |
|
表示有效日期范圍的結(jié)束,字符串格式為"YYYY-MM-DD" |
fields |
String |
day |
有效值 year,month,day涵妥,表示選擇器的粒度 |
bindchange |
EventHandle |
|
value 改變時(shí)觸發(fā) change 事件乖菱,event.detail = {value: value} |
bindcancel |
EventHandle |
|
取消選擇時(shí)觸發(fā) |
disabled |
Boolean |
false |
是否禁用 |
// wxml
<!-- 日期選擇器 -->
<view class="picker-container">
<text>日期選擇器:mode = date</text>
<picker class="picker" fields="month" mode="date" value="{{dateValue}}" start="{{dateStart}}" end="{{dateEnd}}" bindchange="dateChange">
<view class="picker">
當(dāng)前選擇: {{dateValue}}
</view>
</picker>
</view>
// js
.picker-container {
text-align: center;
margin-top: 20px;
background-color: yellow;
font-size: 40rpx;
}
.picker {
margin-left: 10%;
margin-right: 10%;
background-color: orange;
}
// js
data : {
dateValue: "2018-06-21", // 日期選中時(shí)間
dateStart: "2018-01-01", // 日期開(kāi)始時(shí)間
dateEnd: "2018-12-30", // 日期結(jié)束時(shí)間
},
dateChange: function (event) {
let date = event.detail.value;
console.log(event);
this.setData({
dateValue: date
});
},
5. 地區(qū)選擇器:mode = region
屬性名 |
類(lèi)型 |
默認(rèn)值 |
說(shuō)明 |
value |
Array |
[] |
表示選中的省市區(qū),默認(rèn)選中每一列的第一個(gè)值 |
custom-item |
String |
|
可為每一列的頂部添加一個(gè)自定義的項(xiàng) |
bindchange |
EventHandle |
|
value 改變時(shí)觸發(fā) change 事件蓬网,event.detail = {value: value} |
bindcancel |
EventHandle |
|
取消選擇時(shí)觸發(fā) |
disabled |
Boolean |
false |
是否禁用 |
// wxml
<!-- 省市區(qū)選擇器 -->
<view class="picker-container">
<text>省市區(qū)選擇器:mode = region</text>
<picker class="picker" mode="region" value="{{regionValue}}" custom-item="{{custom}}" bindchange="regionChange">
<view class="picker">
當(dāng)前選擇: {{regionValue}}
</view>
</picker>
</view>
// wxss
.picker-container {
text-align: center;
margin-top: 20px;
background-color: yellow;
font-size: 40rpx;
}
.picker {
margin-left: 10%;
margin-right: 10%;
background-color: orange;
}
// js
data : {
regionValue: ["山東省","棗莊市","滕州市"], // 默認(rèn)選中窒所,不填或者空,就默認(rèn)第一個(gè)
custom : "全部",
},
regionChange: function (event) {
let region = event.detail.value;
console.log(event);
this.setData({
regionValue: region
});
},