elementUI级联选择器使用无限极数

本文介绍如何在前端实现级联选择器功能,包括界面代码配置、后端数据交互及无限极数的处理方法。

前端

第一步:先在新增/编辑二合一的界面代码中,将下面的代码复制到需要使用级联选择器的字段上

<el-form-item label="上级部门">
<--
  :options:是我们后端返回的部门树数据 应该定义在data()函数中 通过axios请求将options赋值
   :value: 我们需要传到后端的字段
    :label :选中后的效果
  -->
  <el-cascader
      v-model="editForm.parentId"
      :options="options"
      :props="{ checkStrictly: true,
        value:'id',
        label:'name'
      }"
      clearable></el-cascader>
</el-form-item>

第二步:在data的return中定义一个options[ ] 数组来接收后端的数据

  return {
    options: []
      }
 

 

第三步:在mehtods方法集合中,定义一个getDeptTree方法,方法中通过axios请求将options赋值

getDeptTree() {
  this.$http.get("/dept/tree")  //为后端接口
      .then(result => {
        this.options = result.data
      })
}

第四步:在编辑界面发送axios请求的上面加一个if判断咱们选择器选择的数据是否为一个数组,如果是,就把数组的最后一位数重新赋值给当前数组的名字

if (para.parentId && para.parentId instanceof Array) { //判断para.parentId是否为数组
  // let par = arr[arr.length - 1]; //取出数组最后一位数
  // para.parentId = par    //赋值给para.parentId
  para.parentId = para.parentId[para.parentId.length - 1]
}

第五步 :在最下方的钩子函数mounted(){}中调用getDeptTree方法

//mounted:钩子函数的11种方法之一 vue实例挂载完成时执行里面的方法        
mounted() {          
   this.getDepartments();
}

后端

doamin层

//无限极数
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private List<Department> children = new ArrayList<>();

 

Controller层

//无限极数
@GetMapping("/tree")
private List<Department> tree(){
    return iDepartmentServicee.tree();
}

Service层

//无限极数
List<Department> tree();

Service实现类

   @Override
    public List<Department> tree() {
        List<Department> result = new ArrayList<>();
        // 查询出所有的数据
        List<Department> allDepartments = departmentMapper.findAll();
        // 将 全部的部门数据 转成map key  value
        Map<Long, Department> deptMap = allDepartments.stream().collect(Collectors.toMap(Department::getId, dept -> dept));
//        Map<Long, Department> deptMap = new HashMap<>();
//        allDepartments.forEach(dept->{
//            deptMap.put(dept.getId(),dept);
//        });
        // 在内存中组装数据
        for (Department dept : allDepartments) {
            if (null == dept.getParentId()){
                // 这就是一级数据
                result.add(dept);
            }else {
                // 这个是儿子 dept对象 它不是爹 那么它有几个爹
                Department parent = deptMap.get(dept.getParentId());
                parent.getChildren().add(dept);
            }
        }
        return result;
    }

 

 

 


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值