elementui cascader+高德api省市区多级联动

一 创建工具方法

如果你像我一样在很多页面都要用这个联动,就抽出来做成工具

在utils中创建province.js代码如下:

export default{
  data () {
    return {
      /* 高德地图api */
      url: 'https://restapi.amap.com/v3/config/district?keywords=&subdistrict=3&extensions=base&key=<你的key>',
      /* 选项列表 */
      cityOptions: [],
      /* 选项列表格式 */
      cityProps: {
        value: 'name',
        label: 'name',
        children: 'districts'
      }
    }
  },
  methods: {
    /* 获取省市区选项 */
    getCity () {
      axios.get(this.url).then(res => {
        this.cityOptions = this.getTreeData(res.data.districts[0].districts)
      })
    },
    /* 递归处理末尾项district为0的空项 */
    getTreeData (data) {
      // 循环遍历返回的数据
      for (var i = 0; i < data.length; i++) {
        if (data[i].districts.length < 1) {
          // districts若为空数组,则将districts设为undefined
          data[i].districts = undefined
        } else {
          // districts若不为空数组,则继续 递归调用 本方法
          this.getTreeData(data[i].districts)
        }
      }
      return data
    },
  }
}

完事后在main.js中引入这个工具,丢到mixin中

import province from '@/utils/province'

Vue.mixin(province)

二 elementui-cascader

// elementui
<el-cascader size="large"
             ref="addPoint"
             placeholder="请选择"
             :props="cityProps"
             :options="cityOptions"
             clearable
             v-model="selectedOptions"
             @change="changeCity">
</el-cascader>

// js
调用utils中的province.js
created(){
   // 这个getCity是定义在main.js的mixin中
    this.getCity()
},
changeCity(){
  console.log(this.selectedOptions)
  // ['浙江省','湖州市','长兴县'],向上海、北京这些都是三级下钻
},

三 注意问题

默认的cascader高度需要调整下,不然就是这样的

在这里插入图片描述

在global.css中给他一个高度

.el-cascader-menu {
    height: 300px;
}

最终效果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

just路人周

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值