首页 > 其他分享 >异步联级选择器数据回显<a-cascader>

异步联级选择器数据回显<a-cascader>

时间:2023-03-02 12:12:56浏览次数:33  
标签:areaList 回显 res id 联级 districtIds data 选择器 加载

问题

项目中会用到联级选择多级选择,因为联级数据量较大,选择了异步加载数据。每次加载选中一层的数据

image

提交的时候会提交每一层或者最后一层的节点id到后端保存,新增的时候很好实现,但是到了修改回显数据的时候处理起来就比较麻烦了,因为第一次只加载第一层的数据,下级数据没有加载,导致回显的时候匹配不上去,只会回显第一层的数据

思路

找到第一层对应的节点id,异步加载出对应的下一层数据,然后再找到第二层对应的节点id,加载出对应第二层下一层数据,依次类推,知道加载完所有层

实现

image

image

        Api.districtList({ districtId: this.formData.districtId }).then(res => {
              // res.data.districtIds 是正序的所有层级对应的id
              res.data.districtIds.forEach((v,vindex) => {
                // this.areaList 是区划数据list,初始化的是已经赋了第一层的数据
                this.areaList.forEach((t,index) => {
                  // 找到第一层对应的节点,然后所有的处理都在这个节点依次往下
                  // res.data.districtIds[vindex + 1]判断有几层数据,如果只有两层则加载一次,多一层再多加载一次
                  if (res.data.districtIds[vindex + 1] && t.id === v) {
                    this.onLoadData([this.areaList[index]]).then(() => {
                      this.areaList[index].childNameList?.forEach((w, ind) => {
                        if (res.data.districtIds[vindex + 2] && w.id === res.data.districtIds[vindex+1]) {
                          this.onLoadData([this.areaList[index].childNameList[ind]]).then(() => {
                            this.areaList[index].childNameList[ind].childNameList.forEach((s,sindex) => {
                              if (res.data.districtIds[vindex+3] && s.id === res.data.districtIds[vindex+2])         {
                                this.onLoadData([this.areaList[index].childNameList[ind].childNameList[sindex]])
                              }
                            })
                          })
                        }
                      })
                    })
                  }
                })
              })
              this.form = Object.assign(this.form, this.formData, { districtId: res.data.districtIds })
            })
// 异步加载区划树
    onl oadData (selectedOptions) {
      const targetOption = selectedOptions[selectedOptions.length - 1]
      return new Promise(resolve => {
        implementationAPI.findLevelAllDistrict({ pid: targetOption.id }).then((res) => {
          if (res.success) {
            targetOption.childNameList = res.data.treeNodes
            this.areaList = [...this.areaList]
            resolve()
          } else {
            this.$message.error('数据加载失败')
          }
        })
      })
    }

标签:areaList,回显,res,id,联级,districtIds,data,选择器,加载
From: https://www.cnblogs.com/wang--chao/p/17171328.html

相关文章

  • jQuery中选择器(包含实例)
    因为我查了一下,发现网上别人总结的确实也都不错了,所以我下面主要是对选择器的使用(其实主要还是为了督促自己多练习使用啦)推荐两个我觉得不错的关于选择器的总结:​​jQuery选......
  • 小程序搜索框选中目标 回显数据
     父页面/**物料输入事件*/setMaterial:function(e){letindex=parseInt(e.currentTarget.dataset.idx);//letmaterial=e.detail.value;//letinfo......
  • 带回显的图片上传组件
       importReact,{useState,Fragment,useMemo}from'react';import{Upload,Modal,Progress}from'antd';import{proxyDCIMAPI}from'@/services/p......
  • 03_17_JavaWeb||day20_JQuery基础||day20_JQuery基础(选择器:筛选具有相似特征的元素(
    今日内容1.JQuery基础:1.概念2.快速入门3.JQuery对象和JS对象区别与转换4.选择器5.DOM操作6.案例JQuery基础:概念:一个JavaScript框架。简化JS开发jQuer......
  • vant 时间范围选择器封装
    <template> <divclass="edit-time-picker">  <van-popupv-model="showPicker"roundposition="bottom">   <van-picker    v-show="step===......
  • 关于iView手动清除Select选择器内容的问题
    this.$refs.refName.clearSingleSelect()以上可以看出如果要生效清楚事件就必须设置好那个clearClose按钮tooltip:以上的方法会触发当前选择器的change事件,所以在监听c......
  • scoped属性和深度选择器
    1.scoped属性的作用:加上scoped属性的作用是---样式只对当前组件有效。对于某个组件,如果style加上scoped属性,即:给当前子组件的结构中都添加上一个data-v-xxx自定义属性,会发......
  • element日期时间选择器双向数据绑定问题
    <el-form-item         label="生效时间:"         prop="startTime"        >         ......
  • html+css基础--选择器
    注:图片来源于w3c 1、id选择器(只能唯一、#abc)2、class选择器(可以重复、.abc)(又称类选择器,属性值可有多个,用空格隔开)3、通用选择器*4、复合选择器-交集选......
  • css选择器 选择相同标签中的第N个
    <div><span>O了个K</span><span>2020-05-08</span><span>来源:***</span></div>使用css选择器怎么才可以选择到文本“2020-05-08”和"来源:***"div>span:nth-c......