antd级联选择器(a-cascader)动态加载和动态回显效果实现

这篇具有很好参考价值的文章主要介绍了antd级联选择器(a-cascader)动态加载和动态回显效果实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、介绍

​ 需要实现级联选择器动态拿到每一层级的数据并显示,同时在编辑数据时弹框回显对应的层级关系。

2、效果图如下图所示:(只实现3层的)

antdesignvue级联选择器回显,Antd,大前端,javascript,前端,vue.js,antd

3、实现方法

(1)层级可单独选择

​ 给组件添加 :checkStrictly="true" 这个属性就可以实现单独勾选一级、二级、三级组织关系。(官方api没有写)

(2)组件使用

​ 首先先在html里 模态框上写上a-cascader组件

 <a-modal v-model="uploadNew" :title="title" :width="800" :footer="null" @cancel="resetForm">
        <a-form-model :model="addForm" :label-col="labelCol" :wrapper-col="wrapperCol" ref="addForm" :rules="roleRules">
           
          <a-form-model-item label="所属组织" prop="orgIds">
            <a-cascader  v-model="addForm['orgIds']"
                         :options="options"
                         change-on-select
                         @change="onChange"
                         :load-data="loadData"
                         :checkStrictly="true"
                         placeholder="选择组织" />
          </a-form-model-item>
          <a-form-model-item :wrapper-col="{ span: 14, offset: 10 }">
            <span @click="onSubmit" style="cursor: pointer">
             提交
            </span>
            <span @click="resetForm" style="margin-left: 100px;cursor: pointer">
              取消
            </span>
          </a-form-model-item>
        </a-form-model>
      </a-modal>
    

(3)data数据

  data() {
    return {
      options: []
    }
  },

(4)实现动态加载数据

​ 先实现只有动态加载数据的功能(根据官网https://1x.antdv.com/components/cascader-cn/示例即可实现)

1、 提示:options的数据格式是这样的

 options: [
        {
          value: 'zhejiang',
          label: 'Zhejiang',
          isLeaf: false,//是否叶子节点
          children:[]
        },
        {
          value: 'jiangsu',
          label: 'Jiangsu',
          isLeaf: false,
        },
      ],

2、methods方法

注意:(初始化时会先获取第一层级的数据)

//获取一级组织
    async getOneList(){
      try {
        let par={
          parentId:''
        }
        const res = await getOrgOneList(par)
        this.roleOneList=res.data.data
        this.roleOneList.forEach(item=>{
          let temp={
            value:item.id,
            label:item.orgName,
            isLeaf:false,
          }
          this.options.push(temp)
        })
      } catch (error) {
        console.log(error)
      }
    }, 

3、异步加载数据方法

   async loadData(selectedOptions) {
      const targetOption = selectedOptions[selectedOptions.length - 1];
      this.levelIndex=selectedOptions.length+1 //点第几级组织,selectedOptions长度就是几,点3级时,没有叶子节点,不会进入这个方法(这里只会等于2,3)
      targetOption.loading = true;
      let parentId=targetOption.value//根据父id才能查询子数组
      await this.getOrgTwoList(parentId)//这个方法是掉接口,返回2,3级数据,下方有该方法
      targetOption.loading = false;
      if(this.levelIndex<=3){
        targetOption.children = this.roleTwoList
      }
      this.options = [...this.options];
 
    },
    onChange(value) {
      this.roleCheck=value
      console.log(value,'sel')
    },

4、获取2,3级组织列表

 
//根据父id获取2,3级组织列表
    async getOrgTwoList(id){
      try {
        let par={
          parentId:id
        }
        const res = await getOrgOneList(par)//掉接口,获取下一层级数据
        this.roleTwoList=[]
        res.data.data.forEach(item=>{
          let temp={
            value:item.id,
            label:item.orgName,
            isLeaf: this.levelIndex==3?true:false//判断是否是叶子节点
          }
          this.roleTwoList.push(temp)
        })
      } catch (error) {
        console.log(error)
      }
    },

(5)编辑回显

在上面基础上,实现编辑的时候数据回显

 //编辑用户
    async editUser(row){
   
      this.addForm=Object.assign({},row)
      this.addForm.orgIds=row.orgIds.split(',')//数据需要转成数组的格式
      for (let i = 0; i < this.addForm.orgIds.length - 1; i++) {
        await this.getNextList(this.addForm.orgIds[i])//获取下一层级的数据
      }
      this.uploadNew=true//显示弹框
    },

方法实现

//根据父id获取下一层级数据  
async getNextList (targetOption) {
      let obj = {
        parentId: targetOption
      }
          const res = await getOrgOneList(obj)//掉接口,获取下一层级数据
          const list = res.data.data.map((item) => {
            // dLevel == 3 时表示是叶子节点
            this.$set(item,'isLeaf',item.dLevel == 3)
            this.$set(item,'value',item.id)
            this.$set(item,'label',item.orgName)
            return item
          })
          //初始化时,this.options包含全部第一层级的数据
            this.options.forEach((item) => {
              if (item.children) {
                item.children.forEach((ite) => {
                  if (ite.value == targetOption ) {
                    this.$set(ite,'children',list)
                    // ite['children'] = list
                  }
                })
              }
              if (item.value == targetOption) {//数据value值等于父id
                this.$set(item,'children',list)
              }
            })
          this.options = [...this.options]
    },

以上getOrgTwoList和getNextList方法都是根据父id获取下一层级(2,3级)数据,可优化。文章来源地址https://www.toymoban.com/news/detail-824404.html

到了这里,关于antd级联选择器(a-cascader)动态加载和动态回显效果实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • element UI级联选择器---动态加载数据,动态控制二级面板的显示与隐藏

     一级数据列表是在页面初始化的时候调用接口返回的数据; 二级数据列表需要在获取到一级数据id的时候调用接口得到数据进行列表渲染; 问题: 使用了el-cascader后发现如果第一次点击父级A获取到二级数据,并且二级面板显示,第二次点击父级B获取到二级数据为[ ],此时

    2024年02月08日
    浏览(35)
  • ElementUI —— Cascader 级联选择器

    前言:         项目中使用Cascader级联选择器,通过递归处理后端接口返回的数据。    

    2024年02月13日
    浏览(31)
  • ElementUI Form:Cascader 级联选择器

    ElementUI安装与使用指南 Cascader 级联选择器 点击下载learnelementuispringboot项目源码 效果图 el-cascader.vue(Cascader 级联选择器)页面效果图 项目里el-cascader.vue代码 Cascader Attributes Cascader Events Cascader Methods Cascader Slots CascaderPanel Attributes CascaderPanel Events CascaderPanel Methods CascaderPanel Slo

    2024年02月21日
    浏览(32)
  • Vant Cascader 级联选择使用 wx小程序

    使用vant 级联选择的主要流程就是根据options的值进行使用,如果需要自定义可以把从api获得的信息通过算法进行处理处理成options的样式就可以使用了 。 首先就是先会在微信小程序中使用vant的组件这里直接引用不做过多的介绍, 之后我们观察这个组件是由 vant-field 和 vant-c

    2024年02月11日
    浏览(32)
  • vue中Cascader 级联选择器实现-修改实现

    vue 的cascader研究了好长时间,看了官网给的示例,上网查找了好多信息,才解决修改时回显的问题,现将方法总结如下: el-form-item   label=\\\"芯片\\\" prop=\\\"firmware\\\"                 el-cascader                     ref=\\\"cascader\\\"                     :options=\\\"firmwareTypeOptions\\\"        

    2024年02月15日
    浏览(39)
  • el-cascader级联选择器那些事

    vue3+element-plus+ts 使用cascader组件提供的getCheckedNodes()

    2024年02月16日
    浏览(34)
  • Naive UI 组件使用体验之-级联选择 Cascader

    地址区域选择 安装依赖 npm install naive-ui -D 按需引入之-手动引入 使用 这里我们是要对收货地址进行一个增加操作。 我们这里只针对 所在地址 进行说明。 获取region 这里需要通过接口提前请求

    2024年02月11日
    浏览(27)
  • Element-ui(Cascader 级联选择器)实现三级联动

    市区表: 县区表: 省级表: Controller层: service层 serviceimpl实现 mapper层实现 映射省下面所有的市 映射市下面所有的县 查询所有的区县 对应的省JavaBean 对应市JavaBean 对应的县区JavaBean 级联选择器 方法: 注意:级联选择器需要保持和后端映射保持一致回显数据 element-ui官网级

    2024年02月11日
    浏览(53)
  • vue+element Cascader 级联选择器 > 实现省市区三级联动

    看完我们就开始啦 完美(实现后别忘记动动小手点个赞哦~) 请安装指定版本的element-china-area-data(5.0.2),否则可能会导致报错:CodeToText为undefined(我就遇到了(嘘),要注意哦~) ↩︎

    2024年02月16日
    浏览(43)
  • Ant的 select选择器和Cascader 级联选择器下拉选框随着页面滑动样式脱离

     在select标签和cascader标签里添加  :getPopupContainer=\\\"(triggerNode:any) = (triggerNode.parentElement)\\\" 即可  

    2024年02月15日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包