element中级联选择器选中任意一项(动态加载数据)

本文介绍如何在Vue.js应用中使用Element UI的级联选择器,实现动态加载数据并设置任意项为选中状态。通过HTML结构、数据绑定和方法调用来控制级联选择器的行为。
部署运行你感兴趣的模型镜像

html部分

      <el-cascader
        class="filter-item"
        @change="tableAreaSelect"
        @active-item-change="handleItemChange"
        :props="props"
        placeholder="请选择地区"
        :options="options"
        v-model="tableAreas"
        clearable>
      </el-cascader>

data部分

       props: {
          value: 'main',
          // 显示的文字字段名
          label: 'areaName',
          // 子层级字段名
          expandTrigger: "hover",
          children: "child",
          checkStrictly: true
        },
    options:[],
    tableAreas:[],

methods:{}

      // 获取第一级
      getArea(){
        let that = this;
        getInfo({}).then((res) => {
          this.info = res.data.dictArea;
          // console.log(res.data.dictArea);
          let id = that.info.id
        getChildDictAreaById(id).then(res=>{
          that.options = res.data
          that.options.map((item, index) => {
            for (let k in item) {
              if (!item[k]) {
                delete item[k]
              }
            }
            // 先让数据变成父级
            item.child = []
            // 手动创建字段表明当前索引 假设arrIndex值为'1-2-3' 即为options[1].child[2].child[3]
            item.arrIndex = index + ''
            // 将当前数据转成字符串放入对象里 当做value值
            item.main = JSON.stringify(item)
          })
        })
        });
      },


      tableAreaSelect(){
        if (this.tableAreas.length > 0){
          this.listQuery.areaId = JSON.parse(this.tableAreas[this.tableAreas.length - 1]).id
        }else {
          this.listQuery.areaId = null
        }
        // console.log(JSON.stringify(this.listQuery))
      },
      handleItemChange (val) {
        if(val.length != 0){
          val = JSON.parse(val[val.length - 1])
          // 最多只有4层,动态显示展开层级数
          if (4 - val.areaLevel == 0) return
          //每选中一个选项将本条数据push到val里  ,val.length - 1的那一项必然是当前点击的那一项index索引
          getChildDictAreaById(val.id).then(res => {
            let data = res.data
            let arrIndex = val.arrIndex
            data.map((item, index) => {
              // 手动创建字段表明当前索引 假设arrIndex值为'1-2-3' 即为options[1].child[2].child[3]
              item.arrIndex = arrIndex + '-' + index
              // 将当前数据转成字符串放入对象里 当做value值
              item.main = JSON.stringify(item)
              // 判断是否为最后一层
              let a = 4 - item.areaLevel
              if (a>0) {
                item.child = []
              }
            })
            // 根据父元素的arrIndex判断塞到哪个父元素下
            arrIndex = arrIndex.split('-')
            // 首项键不是child 和for循环里区别开
            let a = this.options[arrIndex[0]]
            for (let i = 1; i < arrIndex.length; i++) {
              a = a['child'][arrIndex[i]]
            }
            this.$delete(a, 'child');
            this.$set(a, 'child', data)
          })
        }
      },

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值