el-cascader 联级选择器动态加载子节点数据

先看我做的效果

可能每个人想要的效果不一样,我的只能做一个参考,一级数据是定死的,二级和三级数据是通过选中上级数据,请求回来的,

先看代码

              <el-cascader
                ref="cascader" // 全部选中是返回数据时需要
                size="mini"  // 可有可无
                style="width: 220px" // 可有可无
                @change="change" // 上传事件
                :props="props" // 必要,配置属性
                :options="options" //必要 可选项数据源,键名可通过Props属性配置
                clearable // 是否可以清空
              >
              </el-cascader>
<script>
export default {
 data(){
  return {
   options: [],
   props: {
    // multiple: true, // 开启只显示最后选择的值,按照需求来
    emitPath: false, // 设置 false,则只返回该节点的值
    lazy: true,
    async lazyLoad(node, resolve) {
     const { level } = node;
     let stop_level = 3; //设置需要几级数据,
     // list 初始数据,我的是写死的,你们可以根据你们的实际情况去修改,
     let list = [
            {
              label: "车辆类型",
              value: 1,
            },
            {
              label: "物资类型",
              value: 2,
            },
            {
              label: "专家类型",
              value: 3,
            },
          ];
          console.log(list);
          // 超过最大层级,停止向下加载
          let callback = () => {
            resolve(
              (list || []).map((ele) => {
                return Object.assign(ele, {
                  leaf: level >= stop_level,
                });
              })
            );
          };
          if (level == 1) {
            const { value } = node;
            console.log("选中的值",value); // value选中的值
            let nodes = await getDropDownData({ resourType: value }); //需要发起的请求接口
            let _nodes = nodes.data.records.map((item) => ({
              value: item.id,
              label: item.name,
            }));
            console.log(_nodes);
            resolve(_nodes);
          } else if (level == 2) {
            const { value } = node;
             console.log("选中的值",value); // value选中的值
            let nodes = await getskuList(value); // 需要发起的请求接口
            let _nodes = nodes.rows.map((item) => ({
              value: item.id,
              label: item.name,
              leaf: true, //控制是不是最后一级了
            }));
            resolve(_nodes);
          }
           //要是你还需要三级,四级,五级数据,可以直接往后面这样加就可以了
           //else if (level == 3) {
           // const { value } = node;
           //  console.log("选中的值",value); // value选中的值
           //let nodes = await getskuList(value); // 需要发起的请求接口
           // let _nodes = nodes.rows.map((item) => ({
           //  value: item.id,
           // label: item.name,
           //  leaf: true,
           // }));
           // resolve(_nodes);
           // }
            else {
            callback();
          }
        },
      },
  }
 }

methods:{
     change(e) {
      // console.log(this.options);
      let nodeObj = this.$refs["cascader"].getCheckedNodes();
      console.log("节点的值", e);
      console.log("节点全部数据", nodeObj);
    },
 }
}
</script>

  • 21
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
el-cascader 是一个级联选择器组件,支持懒加载。当用户选择某一级别的选项时,可以通过懒加载的方式异步加载下一级别的选项。如果需要在 el-cascader 中懒加载选到最后一级,可以通过以下步骤实现: 1. 在 el-cascader 的 props 中设置 lazy 为 true,表示开启懒加载功能。 2. 在 el-cascader 的 props 中设置 lazyLoad 方法,该方法会在用户点击某一级别的选项时被调用。在该方法中,可以根据当前点击的节点信息,异步加载下一级别的选项,并在加载完成后调用 resolve 方法将数据返回给 el-cascader。 3. 在 el-cascader 的 props 中设置 checkStrictly 为 true,表示取消父节点与子节点的严格关联,可以任意选中任何一级作为结束。 4. 在 el-cascader 的 change 事件中,可以监听用户选中某一级别的选项,并在选中后关闭级联弹层。 如果需要实现 el-cascader 懒加载选到最后一级时的数据回显,可以通过以下步骤实现: 1. 获取级联下拉列表的 options,不需要全部渲染,只需要渲染被选中的部分的那一条链路。 2. 为级联选择器绑定的 value 赋值,将选中的节点信息保存到 value 中。 3. 为最后一级添加 leaf 属性,告诉结构树此节点为末级节点。 如果在懒加载过程中出现了 bug,例如单击单选框不会调接口获取数据,但是会打开右侧页面,可以通过在 handleChange 方法中触发标签的点击事件来解决。具体实现可以参考引用和引用中的代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值