当前位置:首页 > VUE

vue实现城市

2026-01-08 02:37:13VUE

Vue 实现城市选择功能

使用 Element UI 的 Cascader 组件

Element UI 提供了一个 Cascader 级联选择器组件,非常适合实现城市选择功能。需要先安装 Element UI 并导入 Cascader 组件。

<template>
  <el-cascader
    v-model="selectedCities"
    :options="cityOptions"
    :props="{ expandTrigger: 'hover' }"
    @change="handleChange"
  ></el-cascader>
</template>

<script>
export default {
  data() {
    return {
      selectedCities: [],
      cityOptions: [
        {
          value: 'beijing',
          label: '北京',
          children: [
            {
              value: 'haidian',
              label: '海淀区'
            }
          ]
        }
      ]
    }
  },
  methods: {
    handleChange(value) {
      console.log(value)
    }
  }
}
</script>

使用第三方城市数据

可以使用现成的城市数据包,如 china-location 或 province-city-china。安装后直接导入数据使用。

npm install province-city-china
import { province, city, area } from 'province-city-china'

export default {
  data() {
    return {
      provinces: province,
      cities: city,
      areas: area
    }
  }
}

自定义城市选择组件

可以创建自定义的城市选择组件,通过三级联动实现省市区选择。

<template>
  <div>
    <select v-model="selectedProvince" @change="loadCities">
      <option v-for="province in provinces" :value="province.code">{{ province.name }}</option>
    </select>

    <select v-model="selectedCity" @change="loadAreas">
      <option v-for="city in cities" :value="city.code">{{ city.name }}</option>
    </select>

    <select v-model="selectedArea">
      <option v-for="area in areas" :value="area.code">{{ area.name }}</option>
    </select>
  </div>
</template>

<script>
export default {
  data() {
    return {
      selectedProvince: '',
      selectedCity: '',
      selectedArea: '',
      provinces: [],
      cities: [],
      areas: []
    }
  },
  methods: {
    loadCities() {
      // 根据省份加载城市
    },
    loadAreas() {
      // 根据城市加载区县
    }
  }
}
</script>

使用高德地图 API

高德地图提供了城市选择 API,可以实现更丰富的地图选择功能。

<template>
  <div id="container"></div>
</template>

<script>
export default {
  mounted() {
    AMap.plugin('AMap.DistrictSearch', () => {
      const districtSearch = new AMap.DistrictSearch({
        extensions: 'all',
        subdistrict: 1
      })

      districtSearch.search('中国', (status, result) => {
        console.log(result.districtList[0].districtList)
      })
    })
  }
}
</script>

实现搜索功能

为城市选择器添加搜索功能,提升用户体验。

<template>
  <el-autocomplete
    v-model="searchText"
    :fetch-suggestions="querySearch"
    placeholder="请输入城市名称"
    @select="handleSelect"
  ></el-autocomplete>
</template>

<script>
export default {
  data() {
    return {
      searchText: '',
      cities: []
    }
  },
  methods: {
    querySearch(queryString, cb) {
      const results = this.cities.filter(city => 
        city.name.includes(queryString)
      )
      cb(results)
    },
    handleSelect(item) {
      console.log(item)
    }
  }
}
</script>

vue实现城市

标签: 城市vue
分享给朋友:

相关文章

vue实现目录

vue实现目录

Vue 实现目录功能 在 Vue 中实现目录功能通常需要动态生成目录结构,并支持点击跳转到对应内容区域。以下是几种常见实现方式: 基于滚动监听和动态生成 安装依赖(如需): npm inst…

vue实现多级表头

vue实现多级表头

Vue 实现多级表头的方法 使用 el-table 组件 Element UI 的 el-table 组件支持多级表头的实现,通过嵌套 el-table-column 即可完成。 <el-t…

vue手写签名如何实现

vue手写签名如何实现

实现手写签名的基本思路 在Vue中实现手写签名功能,通常需要借助HTML5的Canvas API来捕获用户的绘制操作。核心流程包括初始化画布、监听触摸/鼠标事件、记录轨迹以及生成签名图片。 安装依…

vue实现字母添加排序

vue实现字母添加排序

实现字母添加排序的方法 在Vue中实现字母添加排序功能,可以通过以下步骤完成: 创建Vue实例并定义数据 new Vue({ el: '#app', data: { letters…

vue实现视窗

vue实现视窗

Vue 实现视窗功能 在 Vue 中实现视窗功能通常涉及监听浏览器窗口大小变化、响应式布局或创建自定义弹窗组件。以下是几种常见实现方式: 监听浏览器窗口大小变化 使用 Vue 的 mounted 和…

vue   实现单选

vue 实现单选

Vue 实现单选功能 在 Vue 中实现单选功能可以通过多种方式,以下是几种常见的方法: 使用原生 <input type="radio"> 绑定 v-model 通过 v-model…