Vant4 Area 省市區(qū)選擇

2023-02-16 17:57 更新

介紹

省市區(qū)三級聯(lián)動選擇,通常與彈出層組件配合使用。

引入

通過以下方式來全局注冊組件,更多注冊方式請參考組件注冊。

import { createApp } from 'vue';
import { Area } from 'vant';

const app = createApp();
app.use(Area);

代碼演示

基礎(chǔ)用法

初始化省市區(qū)組件時,需要通過 ?area-list? 屬性傳入省市區(qū)數(shù)據(jù)。

<van-area title="標題" :area-list="areaList" />

areaList 格式

areaList 為對象結(jié)構(gòu),包含 ?province_list?、?city_list?、?county_list? 三個 key。

每項以地區(qū)碼作為 key,省市區(qū)名字作為 value。地區(qū)碼為 6 位數(shù)字,前兩位代表省份,中間兩位代表城市,后兩位代表區(qū)縣,以 0 補足 6 位。比如北京的地區(qū)碼為 ?11?,以 0 補足 6 位,為 ?110000?。

示例數(shù)據(jù)如下:

const areaList = {
  province_list: {
    110000: '北京市',
    120000: '天津市',
  },
  city_list: {
    110100: '北京市',
    120100: '天津市',
  },
  county_list: {
    110101: '東城區(qū)',
    110102: '西城區(qū)',
    // ....
  },
};

@vant/area-data

Vant 官方提供了一份默認的中國省市區(qū)數(shù)據(jù),可以通過 @vant/area-data 引入:

# 通過 npm
npm i @vant/area-data

# 通過 yarn
yarn add @vant/area-data

# 通過 pnpm
pnpm add @vant/area-data
import { areaList } from '@vant/area-data';

export default {
  setup() {
    return { areaList };
  },
};
Tips: 中國的行政區(qū)劃每年都會有變動,如果發(fā)現(xiàn)省市區(qū)數(shù)據(jù)未及時更新,歡迎提 Pull Request 幫助我們更新。你可以在「國家統(tǒng)計局 - 全國區(qū)劃代碼」 和「民政部 - 行政區(qū)劃代碼」上查詢到最新數(shù)據(jù),請根據(jù)官方數(shù)據(jù)進行核實。

控制選中項

通過 ?v-model? 綁定當前選中的地區(qū)碼。

<van-area v-model="value" title="標題" :area-list="areaList" />
import { ref } from 'vue';

export default {
  setup() {
    const value = ref('330302');
    return { value };
  },
};

配置顯示列

可以通過 ?columns-num? 屬性配置省市區(qū)顯示的列數(shù),默認情況下會顯示省市區(qū),當你設(shè)置為 ?2?,則只會顯示省市選擇。

<van-area title="標題" :area-list="areaList" :columns-num="2" />

配置列占位提示文字

可以通過 ?columns-placeholder? 屬性配置每一列的占位提示文字。

<van-area
  title="標題"
  :area-list="areaList"
  :columns-placeholder="['請選擇', '請選擇', '請選擇']"
/>

API

Props

參數(shù) 說明 類型 默認值
v-model 當前選中項對應(yīng)的地區(qū)碼 string -
title 頂部欄標題 string -
confirm-button-text 確認按鈕文字 string 確認
cancel-button-text 取消按鈕文字 string 取消
area-list 省市區(qū)數(shù)據(jù),格式見下方 object -
columns-placeholder 列占位提示文字 string[] []
loading 是否顯示加載狀態(tài) boolean false
readonly 是否為只讀狀態(tài),只讀狀態(tài)下無法切換選項 boolean false
option-height 選項高度,支持 px vw vh rem 單位,默認 px number | string 44
columns-num 顯示列數(shù),3-省市區(qū),2-省市,1-省 number | string 3
visible-option-num 可見的選項個數(shù) number | string 6
swipe-duration 快速滑動時慣性滾動的時長,單位 ms number | string 1000

Events

事件 說明 回調(diào)參數(shù)
confirm 點擊完成按鈕時觸發(fā) { selectedValues, selectedOptions }
cancel 點擊取消按鈕時觸發(fā) { selectedValues, selectedOptions }
change 選項改變時觸發(fā) { selectedValues, selectedOptions, columnIndex }

Slots

名稱 說明 參數(shù)
toolbar v3.1.2 自定義整個頂部欄的內(nèi)容 -
title 自定義標題內(nèi)容 -
confirm v3.1.2 自定義確認按鈕內(nèi)容 -
cancel v3.1.2 自定義取消按鈕內(nèi)容 -
columns-top 自定義選項上方內(nèi)容 -
columns-bottom 自定義選項下方內(nèi)容 -

方法

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

方法名 說明 參數(shù) 返回值
confirm 停止慣性滾動并觸發(fā) confirm 事件 - -
getSelectedOptions 獲取當前選中的選項 - PickerOption[]

類型定義

組件導(dǎo)出以下類型定義:

import type { AreaProps, AreaList, AreaInstance } from 'vant';

?AreaInstance? 是組件實例的類型,用法如下:

import { ref } from 'vue';
import type { AreaInstance } from 'vant';

const areaRef = ref<AreaInstance>();

areaRef.value?.confirm();

常見問題

在桌面端無法操作組件?

參見桌面端適配。


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號