Vant Picker 選擇器

2022-05-31 11:58 更新

介紹

提供多個選項集合供用戶選擇,支持單列選擇和多列級聯(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
        }
      ]
    };
  }
};

級聯(lián)選擇

使用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: '溫州' }
      ]
    };
  }
};

動態(tài)設置選項

通過 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]]);
    }
  }
};

加載狀態(tài)

若選擇器數(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;
    }
  }
};

API

Props

參數(shù)說明類型默認值
columns對象數(shù)組,配置每一列顯示的數(shù)據(jù)Column[][]
title頂部欄標題string-
confirm-button-text確認按鈕文字string確認
cancel-button-text取消按鈕文字string取消
value-key選項對象中,選項文字對應的鍵名stringtext
toolbar-position頂部欄位置,可選值為bottomstringtop
loading是否顯示加載狀態(tài)booleanfalse
show-toolbar是否顯示頂部欄booleanfalse
allow-html v2.1.8是否允許選項內(nèi)容中渲染 HTMLbooleantrue
default-index單列選擇時,默認選中項的索引number | string0
item-height選項高度number | string44
visible-item-count可見的選項個數(shù)number | string5
swipe-duration v2.2.10快速滑動時慣性滾動的時長,單位msnumber | string1000

Events

當選擇器有多列時,事件回調(diào)參數(shù)會返回數(shù)組

事件名說明回調(diào)參數(shù)
confirm點擊完成按鈕時觸發(fā)單列:選中值,選中值對應的索引
多列:所有列選中值,所有列選中值對應的索引
cancel點擊取消按鈕時觸發(fā)單列:選中值,選中值對應的索引
多列:所有列選中值,所有列選中值對應的索引
change選項改變時觸發(fā)單列:Picker 實例,選中值,選中值對應的索引
多列:Picker 實例,所有列選中值,當前列對應的索引

Slots

名稱說明
default自定義頂部欄內(nèi)容
title自定義標題內(nèi)容
columns-top自定義選項上方內(nèi)容
columns-bottom自定義選項下方內(nèi)容

Column 數(shù)據(jù)結(jié)構(gòu)

當傳入多列數(shù)據(jù)時,columns為一個對象數(shù)組,數(shù)組中的每一個對象配置每一列,每一列有以下key

鍵名說明類型
values列中對應的備選值string[]
defaultIndex初始選中項的索引,默認為 0number
className為對應列添加額外的類名any
children v2.4.5級聯(lián)選項Column

方法

通過 ref 可以獲取到 Picker 實例并調(diào)用實例方法,詳見 組件實例方法

方法名說明參數(shù)返回值
getValues獲取所有列選中的值-values
setValues設置所有列選中的值values-
getIndexes獲取所有列選中值對應的索引-indexes
setIndexes設置所有列選中值對應的索引indexes-
getColumnValue獲取對應列選中的值columnIndexvalue
setColumnValue設置對應列選中的值columnIndex, value-
getColumnIndex獲取對應列選中項的索引columnIndexoptionIndex
setColumnIndex設置對應列選中項的索引columnIndex, optionIndex-
getColumnValues獲取對應列中所有選項columnIndexvalues
setColumnValues設置對應列中所有選項columnIndex, values-
confirm v2.4.0停止慣性滾動并觸發(fā) confirm 事件--

常見問題

在桌面端無法操作組件?

參見在桌面端使用


實例演示

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號