element 级联选择器 省市区动态获取

Posted 妮可是条狗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了element 级联选择器 省市区动态获取相关的知识,希望对你有一定的参考价值。

项目需要实现下图效果,并且可以支持选择到任意一级

根据获取省市区码的接口拿到当前的省市区编码,再将编码传到获取该地区数据的接口,拿到返回值传回父组件。

1.通过lazy开启动态加载,通过lazyload来设置加载数据源的方法,对节点数据添加是否为叶子节点的标志leaf,如果后台数据没有该标志,可自己手动循环添加)
2.通过props.checkStrictly=true来设置父子节点取消选中关联,从而达到选择任意一级选项的目的
3.我的项目中获取省市区县接口有两个参数:第一个参数是type类型:省PROVINCE,市CITY,区县COUNTY,第二个参数为省市区编码,可针对自己项目接口实际情况进行调整。

<template>
  <div class="cascader">
    <el-cascader
      :props="props"
      ref="cascader"
      clearable
      @change="handleChange"
      :options="dataList"
      v-model="cascaderData"
    >
    </el-cascader>
  </div>
</template>
<script>
export default 
  props: [],
  data() 
    return 
      cityList: [], //市数据
      countyList: [], //区县数据
      dataList: [
        
          code: "",
          name: "",
        ,
      ],
      props: 
        checkStrictly: true, //开启可以只选择一级
        value: "code",
        label: "name",
        lazy: true, // 此处必须为true
        lazyLoad: (node, resolve) => 
          if (node.data.name) 
            this.getChildData(node.data, resolve, node.level);
          
        ,
      ,
      provinceCode: "",
      cityCode: "",
      cascaderData: null,
    ;
  ,
  created() 
    this.getProvince();
  ,
  methods: 
    getChildData(data, resolve, level) 
      if (level == 1) 
        //市
        this.provinceCode = data.code;
        this.getCity(this.provinceCode, resolve);
       else if (level == 2) 
        //区
        this.cityCode = data.code;
        this.getCounty(this.cityCode, resolve);
      
    ,
    handleChange(value) 
      if (value.length > 0) 
        this.$ajax
          .get(this.$urls.fastDistribute.getCityGeo + value[value.length-1])
          .then((res) => 
            if (res.data.code == 200) 
              // 将当前选中节点数据和当前路径数组返回给父组件
              this.$emit("getCascaderData", res.data.data);
            
          );
       else 
        this.$emit("getCascaderData", "");
      
    ,
    //获取省
    getProvince() 
      this.$ajax
        .get(this.$urls.getCityList,  type: "PROVINCE" )
        .then((res) => 
          if (res.data.code == 200) 
            this.dataList = res.data.data;
          
        );
    ,
    //获取市
    getCity(code, resolve) 
      this.$ajax
        .get(this.$urls.getCityList, 
          type: "CITY",
          code: code,
        )
        .then((res) => 
          if (res.data.code == 200) 
            this.cityList = res.data.data;
            resolve(this.cityList);
          
        );
    ,
    //获取区县
    getCounty(code, resolve) 
      this.$ajax
        .get(this.$urls.getCityList, 
          type: "COUNTY",
          code: code,
        )
        .then((res) => 
          if (res.data.code == 200) 
            let data = res.data.data;
            data.forEach((item) => 
              item.leaf = true; //手动添加叶子节点
            );
            this.countyList = data;
            resolve(this.countyList);
          
        );
    ,
  ,
;
</script>

以上是关于element 级联选择器 省市区动态获取的主要内容,如果未能解决你的问题,请参考以下文章

使用 element-ui 级联插件遇到的坑

基于Element Cascader 级联选择器实现动态获取数据

基于Element UI Cascader 级联选择器的中国省市区级联数据

element-ui之级联选择器(Cascader) 全选 功能

Vue+ElementUI Cascader级联选择器 省市区编辑回显(通过CodeToText,TextToCode辅助)

Element-ui(Cascader 级联选择器)实现三级联动