element ui级联选择器,动态获取省市区数据

效果图,可以选择每一层级
在这里插入图片描述

在这里插入图片描述

1、级联选择器html部分

  • @active-item-change监听每一层级的变化。选择安徽省加载数据
  • @change监听选中的变化
 <el-cascader
   v-model="query.address"
    clearable
    placeholder="医院地区"
    :options="provinceList"
    :props="props"
    @active-item-change="handleItemChange"
    @change="provinceChange"
  ></el-cascader>

2、data绑定数据部分

data(){
	return{
		//存储加载的数据
		 provinceList:[]
		 props: {
		     value: "value",
		     children: "cities",
		     label: "label",
		     checkStrictly: true,//添加这个可以选择每一层级,不添加这个只能选择最后一级
		     // multiple:true 设置多选
		 },
	}
}created(){
  //首先要加载一次省级数据
  this.getPosition(null, () => {});
}
methods:{
	 // 地区联动获取数据
    getPosition(val, cb) {
      let vm = this; //查询省市县
      //我们这查询省级数据要传取参数parent:1
      let params = { parent: 1 };
      //判断初始有没有val,查询省级的时候是没有val的,所以默认传值1,,
      //当你选择市级的时候,val是个数组。它会存储省级和市级的value值,
      //同理选择区级的时候,val数组长度是3,存储的是省市区三级的value值
     
      if (!val) {
        //初始化加载 获取所有省份数据
        params = { parent: 1 };
      } else if (val.length === 1) {
        //加载二级  获取市级数据
        params = { parent: val[0] };
      } else {
        //加载3级   获取县级数据
        //注意:因为我们加载区级数据的时候不需要传省级的value值,只需要传市级的value值,如果你需要省级和市级数据一起传的话,在这里自己加上参数
        params = { parent: val[1] };
      }
      //请求后台数据
      hospitalMonitor
        .queryNation(params)
        .then((res) => {
          if (!val) {
            //初始化加载   查询省份数据
            vm.provinceList = res.content.map((e) => {
              return {
                value: e.saleid,
                label: e.province,
                cities: [],
              };
            });
          } else if (val.length === 1) {
            //加载二级    查询该省下市级数据
            vm.provinceList.map((item) => {
              if (item.value === val[0]) {
                item.cities = res.content.map((e) => {
                  return { value: e.saleid, label: e.city, cities: [] };
                });
              }
            });
          } else {
            //加载3级   查询该省市下县级数据
            vm.provinceList.map((item) => {
              if (item.value === val[0]) {
                item.cities.map((value) => {
                  if (value.value === val[1]) {
                    value.cities = res.content.map((e) => {
                      return { value: e.saleid, label: e.county };
                    });
                  }
                });
              }
            });
          }
          cb && cb(res);
        })
        .catch((err) => {
          console.log(err);
        });
    },
     // 一级二级改变的时候调取下一级数据
    handleItemChange(val) {
      this.getPosition(val);
    },
}  
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值