element ui 级联选择器动态加载

57 篇文章 0 订阅

利用elementui的级联选择器先请求第一级数据,当用户点击第一级节点时再根据点击节点的id请求它的子类并渲染

<el-cascader
            clearable
            placeholder="请选择"
            v-model="form.dsdCode"
            :props="cascaderProps"
  ></el-cascader>
export default {
  data() {
    return {
    cascaderProps: {
       // label: "goodsName",//当返回的数据字段不是label和value可以改成实际的字段比如goodsName
       // value: "goodsCode",
       // children: "options2"
        lazy: true,
        lazyLoad: this.lazyLoad
                }
        }
    },
   methods: {
    lazyLoad(node, resolve) {
      this.getData(node, resolve);
    },
    async getData(node, resolve) {
      let that = this;
      let level = node.level;
      if (!node.data) {
        await this.Api.vaccName().then(res => {//接口
          const nodes = Array.from(res.data).map(item => ({
            value: item.goodsCode,
            label: `${item.goodsName}`,
            leaf: level >= 1
          }));
          // 通过调用resolve将子节点数据返回,通知组件数据加载完成
          resolve(nodes);
        });
      } else {
        await this.Api.vaccNameChild({ goodsCode: node.data.value }).then(
          res => {
            const nodes = Array.from(res.data).map(item => ({
              value: item.goodsCode,
              label: `${item.goodsName}`,
              leaf: level >= 1
            }));
            // 通过调用resolve将子节点数据返回,通知组件数据加载完成
            resolve(nodes);
          }
        );
      }
    },
   
     }
 }

二、第二种情况

 <el-cascader
   ref="cascader"
    clearable
    placeholder="请选择地区"
     :props="cascaderProps"
     v-model="areaCode"
     @change="selectCityChange"
     ></el-cascader>
export default {
  data() {
    return {
     cascaderProps: {
        checkStrictly: true,//每一级都可以选择,小圆圈
        lazy: true,
        lazyLoad: this.lazyLoad,
      }
    }
    },
    methods:{
            // 获取省市区
    lazyLoad(node, resolve) {
      console.log(node);
      let { level } = node;
      let params=''
      if(level==0){
        params='3200000000'//默认江苏省
      }else{
        params=node.value
      }
         this.Api.city({gbcode:params}).then(res=>{//接口
          if(res&&res.code==200){
            let data=[res.data]
            if(level>0){
              data=res.data.children
            }
            if(level==3){
                  data.forEach(item => {
                  item.leaf=level>=3
                   });
                }
              resolve(data);
           }else{
             this.$message.error('获取地区数据失败')
           }
       })
    },
    
  }

效果如下:
在这里插入图片描述
接口返回的数据:
点击江苏省返回的
在这里插入图片描述
点击无锡返回的:
在这里插入图片描述

//点击级联选择器label也可以选中
.el-cascader-panel .el-radio {
  width: 100%;
  height: 100%;
  z-index: 10;
  position: absolute;
  top: 10px;
  right: -10px;
}
.el-cascader-panel .el-radio__input {
  // visibility: hidden; //隐藏单选框,不隐藏就不用设置
}
.el-cascader-panel .el-cascader-node__postfix {
  top: 10px;
}

  • 10
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值