vue3 地区选择器

1.安装element-plus

npm install element-plus --save

2.在main.ts引入注册

import { createApp } from 'vue';
import App from './App.vue';
import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css';
 
const app = createApp(App);
app.use(ElementPlus);
app.mount('#app');

3.安装省市区数据

npm install element-china-area-data -S

4.使用

<template>
  <el-cascader
    v-model="selectedArea"
    :options="regionOptions "
    @change="handleRegionChange "
    placeholder="请选择省市区"
  ></el-cascader>
</template>

<script>
import { ref } imoport 'vue'

// regionData省市区,provinceAndCityData省市
import { provinceAndCityData, regionData } from 'element-china-area-data';
const regionOptions = ref(regionData);

const selectedArea = ref([])

const handleRegionChange = (value: any) => {
  console.log('Selected Region Codes:', value);
};

</script>

### Vue3 国家地区选择器组件实现方式 基于提供的引用内容,可以结合 Vue3 和 Element Plus 的功能来实现一个国家、地区选择器组件。以下是详细的实现方法和代码示例。 #### 1. 组件设计 国家地区选择器需要支持三级联动:国家 -> 省/州 -> 市/区。用户在选择国家后,动态加载对应的省份或州;在选择省份或州后,动态加载对应的市或区。这种联动可以通过监听 `change` 事件并更新选项列表实现[^1]。 #### 2. 数据结构 为了实现联动效果,需要准备一个多级嵌套的对象作为数据源。例如: ```javascript const areaObj = { "China": { "Beijing": ["Dongcheng", "Xicheng", "Chaoyang"], "Shanghai": ["Huangpu", "Xuhui", "Changning"] }, "USA": { "California": ["Los Angeles", "San Diego", "San Jose"], "Texas": ["Houston", "Dallas", "Austin"] } }; ``` #### 3. 实现代码 以下是一个完整的 Vue3 + Element Plus 实现示例: ```vue <template> <el-form :model="form" label-width="80px"> <el-form-item label="国家"> <el-select v-model="form.country" @change="onCountryChange" placeholder="请选择国家"> <el-option v-for="(item, key) in countries" :key="key" :label="key" :value="key"></el-option> </el-select> </el-form-item> <el-form-item label="省/州"> <el-select v-model="form.province" @change="onProvinceChange" placeholder="请选择省/州"> <el-option v-for="(item, key) in provinces" :key="key" :label="key" :value="key"></el-option> </el-select> </el-form-item> <el-form-item label="市/区"> <el-select v-model="form.city" placeholder="请选择市/区"> <el-option v-for="item in cities" :key="item" :label="item" :value="item"></el-option> </el-select> </el-form-item> </el-form> </template> <script> import { ref, reactive } from &#39;vue&#39;; export default { setup() { const areaObj = { China: { Beijing: [&#39;Dongcheng&#39;, &#39;Xicheng&#39;, &#39;Chaoyang&#39;], Shanghai: [&#39;Huangpu&#39;, &#39;Xuhui&#39;, &#39;Changning&#39;] }, USA: { California: [&#39;Los Angeles&#39;, &#39;San Diego&#39;, &#39;San Jose&#39;], Texas: [&#39;Houston&#39;, &#39;Dallas&#39;, &#39;Austin&#39;] } }; const form = reactive({ country: &#39;&#39;, province: &#39;&#39;, city: &#39;&#39; }); const countries = ref(Object.keys(areaObj)); const provinces = ref([]); const cities = ref([]); const onCountryChange = (country) => { if (areaObj[country]) { provinces.value = Object.keys(areaObj[country]); form.province = &#39;&#39;; form.city = &#39;&#39;; } }; const onProvinceChange = (province) => { if (areaObj[form.country] && areaObj[form.country][province]) { cities.value = areaObj[form.country][province]; form.city = &#39;&#39;; } }; return { form, countries, provinces, cities, onCountryChange, onProvinceChange }; } }; </script> ``` #### 4. 功能说明 - **国家选择器**:从 `areaObj` 中提取所有国家名称,并显示在选择器中。 - **省/州选择器**:根据用户选择的国家,动态更新省/州的选择项。 - **市/区选择器**:根据用户选择的省/州,动态更新市/区的选择项。 - **联动逻辑**:通过监听 `@change` 事件,实时更新下一级的选择项[^1]。 #### 5. 扩展功能 如果需要支持更多功能,例如: - **国际化**:为不同语言用户提供国家、地区名称。 - **异步加载**:从远程 API 获取国家、地区数据。 - **默认值**:设置默认选中的国家、地区。 可以通过调整 `areaObj` 的数据来源以及初始化逻辑实现上述扩展功能。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值