element下el-cascader级联选择框动态懒加载用法

element下el-cascader级联选择框动态懒加载用法

在项目中碰到需要根据一级数据去请求二级然后根据二级去请求三级等等。。。。类似于根据省去找下一级的市、县、等等。如果将数据一次性请求过来,那样页面一打开就得发送几十甚至上百条请求,如果数据量增大还得随之增大,或者让后端一次性全部返回过来,但如果数据量过大一次返回过来还是存在各种问题。
这时候使用element的动态懒加载,它可以根据用户点击的数据动态去加载该条数据的下一层,自带缓存功能就很舒服。废话不多说直接上代码吧。
动态数据绑定懒加载下一级

    <el-cascader
      placeholder="请选择要发送的数据类型"
      ref="cs"
      v-model="checkedData.sendData"
      :props="checkedData.typeOptions"
      @change="m_snedDataChange"
      filterable
      size="mini"
    >
    </el-cascader>
  // 当前选中的数据
  checkedData: {
    sendData: ["R_RAW_STTD"], // 默认选中值
    typeOptions: {
      lazy: true,   // 开启懒加载
      lazyLoad: this.lazyLoad,  懒加载数据格式
    },
  },
   

   async lazyLoad(node, resolve) {
  		let level = node.level;
 		let result;
  		let res;
        let param;
  switch (level) {
    case 0: // 类型
      result = [
        {
          value: "R_RAW_STTD",
          label: "参数一",
        },
        { value: "R_RAE_STTD", label: "参数二" },
        { value: "R_CMD_STTD", label: "参数三" },
      ];
      break;
    case 1:  //一级目录
      res = await tmTcMap.satelliteFindAll();
      result = res.data;
      result.forEach((item) => {
        item.value = item.satelliteId;
        item.label = item.chineseName;
      });
      break;
    case 2: // 二级目录
      param = {
        satelliteId: node.data.value,
      };
      res = await tmTcMap.stationQueryStationBySatelliteId(
        this.$qs.stringify(param)
      );
      result = res.data;
      console.log(result);
      result.forEach((item) => {
        item.value = item.stationId;
        item.label = item.name;
      });
      break;
    case 3: 三级目录
      param = {
        stationId: node.data.value,
      };
      res = await tmTcMap.stationGetDeviceByStationId(
        this.$qs.stringify(param)
      );
      result = res.data;
      console.log(result);
      result.forEach((item) => {
        item.value = item.deviceId;
        item.label = item.name;
	// 大于三级后不再显示后面的,到此结束
        item.leaf = level >= 3;
      });
      break;
    default:
      result = [];
      break;
  }
  resolve(result);
},

其实到这里就已经处理完成了,但你的默认选中值如果也是动态去请求过来的话,虽然数据会变,但element选择框显示这块是没法监测到的,就得再写一个方法 ,在你请求到默认值的时候强制给刷新下lazyLoad
// 异步设置cascader的值
// cs 是选择框的ref值
setValue() {
let cs = this.$refs[“cs”];
cs.panel.activePath = [];
cs.panel.loadCount = 0;
cs.panel.lazyLoad();
},

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值