vue3操作select的option下拉框选择省份、城市

1、下载城市对应的代码的插件

npm install province-city-china --save-dev

2、获取城市对应的代码数据

const { data, province, city, area, town } = require('province-city-china/data');

其中province是省份,city是城市

3、下拉框使用select标签的option

把province和 city上的省份和城市遍历到下拉框上,因为获取的city是所有的城市,不是该省份对应的城市,所以需要过滤掉不是该省份的城市

 省份:<select
              @change="proviceChange($event)"
              v-model="data.form.province"
            >
              <option
                v-for="(item, index) in province"
                :key="index"
                :value="item.code"
              >
                {{ item.name }}
              </option>
            </select>
            城市:<select
              v-model="data.form.city"
              @change="cityChange($event)"
            >
              <option
                v-for="(item, index) in data.cities"
                :key="index"
                :value="item.code"
              >
                {{ item.name }}
              </option>
            </select>
let data = reactive({
   form:{
      province: "440000",
      city: "440100",
   },
   cities:[]
})

 

option的value对应省份和城市的code,使用 v-model的值与option的value匹配,使对应option被选中

因为获取到的 city 包括的所有的城市,想要获取相应省份对应的城市,使用forEach对city遍历获取即可,或者使用过滤器。

4、获取省份对应的城市

data.cities = []
city.forEach((v) => {
      if(v.province == data.form.province.slice(0, 2))
      data.cities.push(v)
});
  

此时可以把省份、城市对应的下拉框显示出来

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面我来给你介绍一下用 Vue 实现全国城市三级联动下拉框的方法。 首先,你需要准备一个城市数据文件(例如 `city.json`),包含了全国所有省市区的信息。 接着,你可以使用 Vue 的组件来实现三级联动下拉框。 1. 创建 Vue 组件 在 Vue 组件中,我们需要定义一个 `data` 对象来存储城市数据和用户选择城市信息,以及一个 `methods` 对象来处理用户选择城市时的逻辑。 ``` <template> <div> <select v-model="province" @change="onProvinceChange"> <option value="">请选择省份</option> <option v-for="p in provinces" :value="p.name">{{ p.name }}</option> </select> <select v-model="city" @change="onCityChange"> <option value="">请选择城市</option> <option v-for="c in cities" :value="c.name">{{ c.name }}</option> </select> <select v-model="district"> <option value="">请选择区县</option> <option v-for="d in districts" :value="d.name">{{ d.name }}</option> </select> </div> </template> <script> import cityData from './city.json'; export default { data() { return { provinces: cityData, cities: [], districts: [], province: '', city: '', district: '', }; }, methods: { onProvinceChange() { this.cities = this.provinces.find(p => p.name === this.province).cities; this.city = ''; this.districts = []; this.district = ''; }, onCityChange() { this.districts = this.cities.find(c => c.name === this.city).districts; this.district = ''; }, }, }; </script> ``` 在这个组件中,我们使用了 `v-model` 指令来绑定用户选择的省市区信息。当用户选择省份时,我们需要根据省份名字查找对应的城市信息,然后更新下拉框中的城市选项;当用户选择城市时,我们需要根据城市名字查找对应的区县信息,然后更新下拉框中的区县选项。 2. 加载城市数据 在组件的 `data` 中,我们将城市数据加载到了 `provinces` 属性中,这个属性是一个数组,每个元素包含了一个省份的信息,包括省份名字和包含所有城市信息的数组。 在这里,我们使用了 `import` 语句导入城市数据文件,然后将其赋值给 `provinces` 属性。你也可以使用 ajax 请求加载城市数据,这里就不再赘述。 3. 渲染下拉框 在组件的模板中,我们使用了 HTML 的 `<select>` 元素来渲染省市区的下拉框。使用 `v-for` 指令循环渲染下拉框的选项,使用 `v-model` 指令来实现双向绑定。在每个下拉框的 `change` 事件处理函数中,我们更新对应的城市或区县信息。 4. 完整代码 下面是完整的代码示例: ``` <template> <div> <select v-model="province" @change="onProvinceChange"> <option value="">请选择省份</option> <option v-for="p in provinces" :value="p.name">{{ p.name }}</option> </select> <select v-model="city" @change="onCityChange"> <option value="">请选择城市</option> <option v-for="c in cities" :value="c.name">{{ c.name }}</option> </select> <select v-model="district"> <option value="">请选择区县</option> <option v-for="d in districts" :value="d.name">{{ d.name }}</option> </select> </div> </template> <script> import cityData from './city.json'; export default { data() { return { provinces: cityData, cities: [], districts: [], province: '', city: '', district: '', }; }, methods: { onProvinceChange() { this.cities = this.provinces.find(p => p.name === this.province).cities; this.city = ''; this.districts = []; this.district = ''; }, onCityChange() { this.districts = this.cities.find(c => c.name === this.city).districts; this.district = ''; }, }, }; </script> ``` 希望这个示例能够帮助到你。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值