【vue】element-ui Cascader 级联选择器动态加载回显(懒加载回显)

前言:不是很懂,欢迎补充指正

方法一:单选情况

单选直接拿placeholder或者换个盒子展示。

方法二:多选应该能,没有实践过,有模拟数据

核心:在组件上绑定key,利用改变key时会重新加载节点,在v-model设置进数据(用v-if也行)。

能自动请求,咱也不知道为啥。

template和data:

<el-cascader
      :key="resetCascader"
      v-model="select"
      :props="props"
    />
  data() {
    return {
      from: {
        id: '1'
      },
      resetCascader: 0, // 记录key值
      // 区域code
      select: [],
      props: {
        // expandTrigger: 'click',
        // emitPath: false,
        lazy: true,
        lazyLoad: (node, resolve) => {
          console.log(node)
          const { level, value } = node
          console.log(level, value)
          setTimeout(async() => {
            const res = await this.getTempData(level, value || null)
            console.log(res)
            return resolve(res)
          })
        }
      }
    }

假设是修改情况,form中有数据,加个监听:

watch: {
    form: {
      handler(newValue) {
        this.addAndEdit(newValue)
      },
      deep: true,
      immediate: true
    }
  },

处理函数:

    addAndEdit(userData) {
      this.resetCascader++
      // this.show = false
      if (userData) {
        this.form = { ...userData }
      }
      this.select = []
      this.select.push(1, 3, 8)
      console.log(this.option)
    }

假数据模拟请求:

// 模拟请求
    getTempData(level, key) {
      return new Promise((resolve, reject) => {
        let result = [] // 最终要返回的数据
        if (level === 0) {
          // 一级的数据
          result = [
            { label: '测试1', value: 1, leaf: false },
            { label: '测试2', value: 2, leaf: false }
          ]
        }
        if (level === 1) {
          // 二级的数据
          if (key === 1) {
            // '测试1' 查回来的子数据
            result = [
              { label: '测试1-1', value: 3, leaf: false },
              { label: '测试1-2', value: 4, leaf: false }
            ]
          } else if (key === 2) {
            // '测试2' 查回来的子数据
            result = [
              { label: '测试2-1', value: 5, leaf: false },
              { label: '测试2-2', value: 6, leaf: false }
            ]
          }
        }
        if (level === 2) {
          // 三级的数据
          if (key === 3) {
            // '测试1' 查回来的子数据
            result = [
              { label: '测试1-1-1', value: 7, leaf: true },
              { label: '测试1-1-2', value: 8, leaf: true }
            ]
          } else if (key === 4) {
            // '测试2' 查回来的子数据
            result = [
              { label: '测试1-2-1', value: 9, leaf: true },
              { label: '测试1-2-2', value: 10, leaf: true }
            ]
          } else if (key === 5) {
            // '测试2' 查回来的子数据
            result = [
              { label: '测试2-1-1', value: 11, leaf: true },
              { label: '测试2-1-2', value: 12, leaf: true }
            ]
          } else if (key === 6) {
            // '测试2' 查回来的子数据
            result = [
              { label: '测试2-2-1', value: 13, leaf: true },
              { label: '测试2-2-2', value: 14, leaf: true }
            ]
          }
        }
        console.log('--开始请求--')
        setTimeout((item, index) => {
          console.log('级联请求到的数据', result)
          // 做一个延时,模拟接口数据返回
          resolve(result)
          console.log('--请求成功--')
        }, 1000)
      })
    },
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

茄茄茄子eggplant

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

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

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

打赏作者

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

抵扣说明:

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

余额充值