返回

vue3手写省市区街道四级联动一学就会!

前端

vue3省市区街道四级联动:从入门到精通

准备JSON数据

第一步是获取包含省、市、区、街道数据的JSON文件。你可以从官方网站或其他来源下载该数据。确保数据格式与本文中提供的示例相同。

导入JSON数据

将JSON数据导入到你的vue3项目中。这通常通过在main.js文件中使用import语句来完成。

创建组件

接下来,创建一个名为ProvinceCityDistrictStreet.vue的组件。这个组件将负责渲染省市区街道四级联动。以下是组件代码:

<template>
  <div>
    <select v-model="selectedProvince">
      <option v-for="province in provinces" :key="province.name" :value="province.name">{{ province.name }}</option>
    </select>
    <select v-model="selectedCity" disabled="!selectedProvince">
      <option v-for="city in cities" :key="city.name" :value="city.name">{{ city.name }}</option>
    </select>
    <select v-model="selectedDistrict" disabled="!selectedCity">
      <option v-for="district in districts" :key="district.name" :value="district.name">{{ district.name }}</option>
    </select>
    <select v-model="selectedStreet" disabled="!selectedDistrict">
      <option v-for="street in streets" :key="street" :value="street">{{ street }}</option>
    </select>
  </div>
</template>

<script>
export default {
  data() {
    return {
      provinces: [],
      cities: [],
      districts: [],
      streets: [],
      selectedProvince: '',
      selectedCity: '',
      selectedDistrict: '',
      selectedStreet: '',
    }
  },
  methods: {
    fetchProvinces() {
      // 从JSON数据中获取省份
      this.provinces = data.provinces;
    },
    fetchCities() {
      // 从JSON数据中根据选定的省份获取城市
      this.cities = this.provinces.find(province => province.name === this.selectedProvince).cities;
    },
    fetchDistricts() {
      // 从JSON数据中根据选定的城市获取区
      this.districts = this.cities.find(city => city.name === this.selectedCity).districts;
    },
    fetchStreets() {
      // 从JSON数据中根据选定的区获取街道
      this.streets = this.districts.find(district => district.name === this.selectedDistrict).streets;
    }
  },
  created() {
    this.fetchProvinces();
  },
  watch: {
    selectedProvince(newValue) {
      this.selectedCity = '';
      this.selectedDistrict = '';
      this.selectedStreet = '';
      this.fetchCities();
    },
    selectedCity(newValue) {
      this.selectedDistrict = '';
      this.selectedStreet = '';
      this.fetchDistricts();
    },
    selectedDistrict(newValue) {
      this.selectedStreet = '';
      this.fetchStreets();
    }
  }
}
</script>

使用组件

ProvinceCityDistrictStreet.vue组件注册到你的vue3项目中。然后,你可以在你的模板文件中使用它。例如,在App.vue文件中,你可以使用如下代码:

<template>
  <div>
    <ProvinceCityDistrictStreet />
  </div>
</template>

<script>
import ProvinceCityDistrictStreet from './components/ProvinceCityDistrictStreet.vue'

export default {
  components: {
    ProvinceCityDistrictStreet
  }
}
</script>

运行项目

运行你的vue3项目,你将看到一个省市区街道四级联动下拉菜单。选择一个省份将填充城市下拉菜单,选择一个城市将填充区下拉菜单,依此类推。

结论

通过本文提供的步骤,你已经学会了如何在vue3中实现省市区街道四级联动。该功能可以轻松集成到你的项目中,从而简化用户界面并提升用户体验。

常见问题解答

  1. 我如何获取JSON数据?

    • 你可以从官方网站或其他来源下载JSON数据。
  2. 我可以在我的组件中使用其他数据源吗?

    • 是的,你可以使用其他数据源,例如后端API或数据库。
  3. 如何处理数据加载?

    • 你可以使用vuex或其他状态管理工具来处理数据加载。
  4. 我可以自定义下拉菜单的外观吗?

    • 是的,你可以通过使用CSS覆盖样式来自定义下拉菜单的外观。
  5. 我遇到了一些错误,该怎么办?

    • 检查你的代码是否有语法错误,并确保JSON数据格式正确。如果问题仍然存在,请在网上搜索或向社区寻求帮助。