vue3 cascader级联选择器(无限级 动态加载)

 效果图:

 

<template>
    <div>
        <el-cascader v-model="state.categoryEcho"
            :props="propsCascader"
            :show-all-levels="false"
            @change="getCascader">
        </el-cascader>
    </div>
</template>

<script setup>
    import { reactive } from 'vue'
    import { getsubcategories } from '@/api/backlog'

    const state = reactive({
        packParams: {
            id: 0, // 默认0为一级
        },
        categoryEcho: [], // el-cascader绑定数组
    })
    
    const propsCascader = {
      lazy: true, // 开启动态加载子节点
      checkStrictly:true,
      lazyLoad: cascaderLazyLoad, // 加载动态数据的方法,仅在 lazy 为 true 时有效
    }
    

    // isParent为1则有下一级为0则没有下一级
    // 接口返回的 cateId cateName 需要赋值给value label
    // 通过cateId 获取下一级
    const cascaderLazyLoad= async (node, resolve)=>{
        let params = state.packParams.id
        if (node.level === 0) {
            await getsubcategories(params).then((res) => {
                let { code, data } = res.data
                if (code === 200) {
                    state.cateList = data.map((item) => {
                        item.value = item.cateId
                        item.label = item.cateName
                        if (item.isParent === 0) {
                            item.leaf = true
                        }else{
                            item.leaf = false;
                        }
                        return item
                    })
                }
            })
             resolve(state.cateList)
        }
        if (node.data.isParent === 0) {
             resolve([])
        }

        if (node.level !== 0)
            getsubcategories(node.data.cateId).then((res) => {
                let { code, data } = res.data
                let list = []
                if (code === 200) {
                    list = data.filter((item) => {
                        item.value = item.cateId
                        item.label = item.cateName
                        if (item.isParent === 0) {
                            item.leaf = true
                        }else{
                            item.leaf = false
                        }
                        return item
                    })
                    resolve(list)
                }
            })
    }

    const getCascader = (value) => {
        if (value) {
            //这里可以获取选中的ID数组
        }
    }

</script>

 注:还有很多配置可参考element plus 官网 官网地址

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚风吹心事

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值