el-cascader 动态加载懒加载

参考链接:https://www.cnblogs.com/ruyijiang/p/18022629

 <el-cascader
            v-model="ruleForm.tagTree"
            placeholder="请选择关联标签"
            :props="props"
            clearable
          ></el-cascader>
data() {
    return {
      props: {
        checkStrictly: true, //是否可以选择树干节点作为选项
        lazy: true, // 是否动态加载子节点
        // lazyLoad加载动态数据的方法(仅在 lazy 为 true 时有效)
        lazyLoad: this.loadTreeNode,
      },
    };
//加载树节点  首次加载页面时就会执行一次,之后每选中一个节点也会调用,来渲染下一层
    loadTreeNode(node, resolve) {
      // 首次加载时 node为{root:true,level:0}
      // node 节点数据  获取node的level字段的值
      const { level } = node;
      //下一层节点
      const nodes = [];
      //如果有子节点 或者 为根节点(即首次进入level为0)
      //也有人写成 node.level == 0 作用是一样的
      if (node.hasChildren || node.root) {
        // 0 代表第一次请求
        let nodeId = level == 0 ? "" : node.data.id;
        //这里setTimeout的目的是 显示加载动画
        setTimeout(() => {
          let params = {
            parentId: nodeId,
          };
          cameraTreeApi(params).then((res) => {
            if (res.data.status == 200) {
              let nodes = [];
              nodes = res.data.data;
              nodes.map((val) => {          //对后台数据进行一下处理,转成规定的label和value
                val.label = val.name;
                val.value = val.id;
              });
              // 回调渲染下一层
              resolve(nodes);
            }
          });
        }, 1);
      } else {
        //如果没有子节点就不发起请求,直接渲染,也避免了点击叶子节点仍然有加载动画的问题
        resolve(nodes);
      }
    },
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值