el-cascader级联选择器单选/多选根据接口懒加载动态获取数据

在Vue项目中,使用elment ui 中 el-cascader 级联选择器,级联选择器每一级的内容对应不同的接口,因此我们要采用懒加载的形式实现对数据的动态获取。

主要思路:通过 lazy 开启动态懒加载,并使用 lazyLoad 来设置加载数据源的方法。lazyLoad 方法有两个参数,第一个参数 node 为当前点击的节点,第二个 resolve 为数据加载完成的回调(必须调用)。

以下先介绍el-cascader级联选择器单选根据接口懒加载动态获取数据

<template>
  <el-cascader
    ref="cascader"
    :props="casProps"
    :options="casData"
    filterable
    clearable
    placeholder="请选择"
    @change="handleCasChange">
  </el-cascader>
</template>
 
<script>
export default {
  name: 'cascaderTest',
  data () {
    return {
    // 获取数据
      casData: [],
      casProps: {
        value: 'casId',
        label: 'casName',
        // 懒加载
        lazy: true, // 必须为true
        lazyLoad:this.lazyLoad
      }
    }
  },
methods:{
	// 懒加载获取数据 
    lazyLoad(node,resolve){
        const level = node.level
        var url
        if (level === 0) {
          url = '接口地址'
        }
        if (level === 1) {
          url = '接口地址'
        }
        if (level === 2) {
          url = '接口地址'
        }
        // 请求看项目具体请求格式
        this.reqM1Service(url, '', "get")
        .then(res => {
          let data
          if (level === 0) {
            data = res.data.data
            // 判断data是否有数据
            if(data.length == 0){
              return this.$message.error("获取数据失败!")
              }else{
                data.forEach(item => {
                this.value = item.casId
                this.label = item.casName
            })
           }
          }
          if (level === 1) {
            data = res.data.data
            if(data.length == 0){
              return this.$message.error("获取数据失败!")
              }
            data.forEach(item => {
              item.value = item.casId
              item.label = item.casName
            })
          }
          if (level === 2) {
            data = res.data.data
            if(data.length == 0){
              return this.$message.error("获取数据失败!")
              }
            data.forEach(item => {
              item.value = item.casId
              item.label = item.casName
              //将相关值赋值到选择器上
              item.leaf = level >= 2
            })
          }
          resolve(data)
        })
      }
    }
}
</script>

多选的实现其实可以类比单选,但是注意要处理最后一个层级。因为多选不会自动关闭选择框,选择的内容会回显在选择框里,但是其最后一级的加载圈会一直在转,且控制台会报错。
在这里插入图片描述
在这里插入图片描述

因此el-cascader级联选择器多选根据接口懒加载动态获取数据在单选的基础上修改以下代码

casProps:{
        //允许多选
        multiple: true, 
        value: 'casId',
        label: 'casName',
        // 懒加载
        lazy: true, // 必须为true
        lazyLoad:this.lazyLoad
      },
		if (level === 0) {
          url = '接口地址'
        }
        if (level === 1) {
          url = '接口地址'
        }
        if (level === 2) {
          url = '接口地址'
        }
       // 新增对最后一级的下一级的处理
       // 到最后一级的时候消除加载圈及禁止继续请求
        if (level === 3) {
          let data
          resolve(data)
          return
        }
        

补充:element-ui Cascader 级联选择器清除选中及高亮

// 清空级联选择器选中状态
this.$refs.cascader.$refs.panel.clearCheckedNodes()
// 清除高亮
this.$refs.cascader.$refs.panel.activePath = []

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
el-cascader的lazyLoad属性是用来实现懒加载动态获取数据的。通过设置lazyLoad属性,可以指定一个方法来加载数据源。方法中有两个参数,第一个参数是当前点击的节点,第二个参数是数据加载完成后的回调函数。在方法中可以根据不同的级别来决定加载哪个接口的数据。如果是最后一级,则可以结束加载并返回数据。在使用lazyLoad属性时,还需要注意绑定正确的this上下文,确保能够访问到相关的api方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [el-cascader级联选择器单选/多选根据接口懒加载动态获取数据](https://blog.csdn.net/weixin_45489658/article/details/115919447)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [使用el-cascader时设置lazyLoad需要注意方法中this的作用域](https://blog.csdn.net/YISHENGYOUNI95/article/details/109080764)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值