提供多個選項集合供用戶選擇,支持單列選擇和多列級聯(lián),通常與 彈出層 組件配合使用
import Vue from 'vue';
import { Picker } from 'vant';
Vue.use(Picker);
Picker 組件通過columns屬性配置選項數(shù)據(jù),columns是一個包含字符串或?qū)ο蟮臄?shù)組
<van-picker :columns="columns" @change="onChange" />
import { Toast } from 'vant';
export default {
data() {
return {
columns: ['杭州', '寧波', '溫州', '嘉興', '湖州']
};
},
methods: {
onChange(picker, value, index) {
Toast(`當前值:${value}, 當前索引:${index}`);
}
}
};
單列選擇時,可以通過default-index屬性設置初始選中項的索引
<van-picker :columns="columns" :default-index="2" />
設置show-toolbar屬性后會展示頂部操作欄,點擊確認按鈕觸發(fā)confirm事件,點擊取消按鈕觸發(fā)cancel事件
<van-picker
show-toolbar
title="標題"
:columns="columns"
@cancel="onCancel"
@confirm="onConfirm"
/>
import { Toast } from 'vant';
export default {
data() {
return {
columns: ['杭州', '寧波', '溫州', '嘉興', '湖州']
}
},
methods: {
onConfirm(value, index) {
Toast(`當前值:${value}, 當前索引:${index}`);
},
onCancel() {
Toast('取消');
}
}
};
通過columns屬性可以配置多列選擇
<van-picker show-toolbar title="標題" :columns="columns" />
export default {
data() {
return {
columns: [
// 第一列
{
values: ['周一', '周二', '周三', '周四', '周五'],
defaultIndex: 2
},
// 第二列
{
values: ['上午', '下午', '晚上'],
defaultIndex: 1
}
]
};
}
};
使用columns的children字段可以實現(xiàn)選項級聯(lián)的效果(從 2.4.5 版本開始支持)
<van-picker show-toolbar title="標題" :columns="columns" />
export default {
data() {
return {
columns: [{
text: '浙江',
children: [{
text: '杭州',
children: [{ text: '西湖區(qū)' }, { text: '余杭區(qū)' }]
}, {
text: '溫州',
children: [{ text: '鹿城區(qū)' }, { text: '甌海區(qū)' }]
}]
}, {
text: '福建',
children: [{
text: '福州',
children: [{ text: '鼓樓區(qū)' }, { text: '臺江區(qū)' }]
}, {
text: '廈門',
children: [{ text: '思明區(qū)' }, { text: '海滄區(qū)' }]
}]
}]
};
}
};
選項可以為對象結(jié)構(gòu),通過設置 disabled 來禁用該選項
<van-picker :columns="columns" />
export default {
data() {
return {
columns: [
{ text: '杭州', disabled: true },
{ text: '寧波' },
{ text: '溫州' }
]
};
}
};
通過 Picker 上的實例方法可以更靈活地控制選擇器,比如使用setColumnValues方法實現(xiàn)多列聯(lián)動
<van-picker :columns="columns" @change="onChange" />
const citys = {
'浙江': ['杭州', '寧波', '溫州', '嘉興', '湖州'],
'福建': ['福州', '廈門', '莆田', '三明', '泉州']
};
export default {
data() {
return {
columns: [
{ values: Object.keys(citys) },
{ values: citys['浙江'] }
]
};
},
methods: {
onChange(picker, values) {
picker.setColumnValues(1, citys[values[0]]);
}
}
};
若選擇器數(shù)據(jù)是異步獲取的,可以通過 loading 屬性顯示加載提示
<van-picker :columns="columns" :loading="loading" />
export default {
data() {
return {
columns: [],
loading: true
};
},
created() {
setTimeout(() => {
this.loading = false;
this.columns = ['選項'];
}, 1000);
}
};
在實際場景中,Picker 通常作為用于輔助表單填寫,可以搭配 Popup 和 Field 實現(xiàn)該效果
<van-field
readonly
clickable
label="城市"
:value="value"
placeholder="選擇城市"
@click="showPicker = true"
/>
<van-popup v-model="showPicker" position="bottom">
<van-picker
show-toolbar
:columns="columns"
@cancel="showPicker = false"
@confirm="onConfirm"
/>
</van-popup>
export default {
data() {
return {
value: '',
showPicker: false,
columns: ['杭州', '寧波', '溫州', '嘉興', '湖州']
}
},
methods: {
onConfirm(value) {
this.value = value;
this.showPicker = false;
}
}
};
參數(shù) | 說明 | 類型 | 默認值 |
---|---|---|---|
columns | 對象數(shù)組,配置每一列顯示的數(shù)據(jù) | Column[] | [] |
title | 頂部欄標題 | string | - |
confirm-button-text | 確認按鈕文字 | string | 確認 |
cancel-button-text | 取消按鈕文字 | string | 取消 |
value-key | 選項對象中,選項文字對應的鍵名 | string | text |
toolbar-position | 頂部欄位置,可選值為bottom | string | top |
loading | 是否顯示加載狀態(tài) | boolean | false |
show-toolbar | 是否顯示頂部欄 | boolean | false |
allow-html v2.1.8 | 是否允許選項內(nèi)容中渲染 HTML | boolean | true |
default-index | 單列選擇時,默認選中項的索引 | number | string | 0 |
item-height | 選項高度 | number | string | 44 |
visible-item-count | 可見的選項個數(shù) | number | string | 5 |
swipe-duration v2.2.10 | 快速滑動時慣性滾動的時長,單位ms | number | string | 1000 |
當選擇器有多列時,事件回調(diào)參數(shù)會返回數(shù)組
事件名 | 說明 | 回調(diào)參數(shù) |
---|---|---|
confirm | 點擊完成按鈕時觸發(fā) | 單列:選中值,選中值對應的索引 多列:所有列選中值,所有列選中值對應的索引 |
cancel | 點擊取消按鈕時觸發(fā) | 單列:選中值,選中值對應的索引 多列:所有列選中值,所有列選中值對應的索引 |
change | 選項改變時觸發(fā) | 單列:Picker 實例,選中值,選中值對應的索引 多列:Picker 實例,所有列選中值,當前列對應的索引 |
名稱 | 說明 |
---|---|
default | 自定義頂部欄內(nèi)容 |
title | 自定義標題內(nèi)容 |
columns-top | 自定義選項上方內(nèi)容 |
columns-bottom | 自定義選項下方內(nèi)容 |
當傳入多列數(shù)據(jù)時,columns為一個對象數(shù)組,數(shù)組中的每一個對象配置每一列,每一列有以下key
鍵名 | 說明 | 類型 |
---|---|---|
values | 列中對應的備選值 | string[] |
defaultIndex | 初始選中項的索引,默認為 0 | number |
className | 為對應列添加額外的類名 | any |
children v2.4.5 | 級聯(lián)選項 | Column |
通過 ref 可以獲取到 Picker 實例并調(diào)用實例方法,詳見 組件實例方法
方法名 | 說明 | 參數(shù) | 返回值 |
---|---|---|---|
getValues | 獲取所有列選中的值 | - | values |
setValues | 設置所有列選中的值 | values | - |
getIndexes | 獲取所有列選中值對應的索引 | - | indexes |
setIndexes | 設置所有列選中值對應的索引 | indexes | - |
getColumnValue | 獲取對應列選中的值 | columnIndex | value |
setColumnValue | 設置對應列選中的值 | columnIndex, value | - |
getColumnIndex | 獲取對應列選中項的索引 | columnIndex | optionIndex |
setColumnIndex | 設置對應列選中項的索引 | columnIndex, optionIndex | - |
getColumnValues | 獲取對應列中所有選項 | columnIndex | values |
setColumnValues | 設置對應列中所有選項 | columnIndex, values | - |
confirm v2.4.0 | 停止慣性滾動并觸發(fā) confirm 事件 | - | - |
參見在桌面端使用。
更多建議: