Cascader级联选择器,通过子节点,回显父级及祖先级节点!

   做后台管理系统的同学们,想必对Cascader级联选择器不会感到陌生,这个组件大多数会与树关联结合,实现对部门人员的分配等操作!这个操作前端的难点大多数是在Cascader与树的回显部分!

一般新增给后端传值的时候,保存当前人员的value或者唯一标识,而编辑回显的时候后端基本上也是将我们保存的值通过节后返回,这个时候我们就要通过返回的Id或者唯一标识,拿到当前树的节点及其祖先级节点,通过处理数据的方式,将值转化为el-Cascader的所需要回显的值!

话不多说直接上代码!

<template>
  <new-container>
 
    <el-cascader
      size="small"
      readonly
      filterable
      :props="{
        multiple: true,
      }"
      ref="auditCascader"
      v-model="auditArr"
      :options="DeptTree"
      :show-all-levels="false"
      clearable
    ></el-cascader>
  </new-container>
</template>
   
<script>
export default {
  name: "",
  data() {
    return {
     //树的值
      DeptTree: [
        {
          value: "1",
          label: "目录1",
          children: [
            {
              value: "1.1",
              label: "目录1.1",
              children: [
                {
                  value: "1.1.2",
                  label: "目录1.1.2",
                  title: "三级目录",
                },
                {
                  value: "1.1.1",
                  label: "目录1.1.1",
                  title: "三级目录",
                },
              ],
              title: "二级目录",
            },
            {
              value: "1.2",
              label: "目录1.2",

              title: "二级目录",
            },
          ],
          title: "一级目录",
        },
        {
          value: "2",
          label: "目录2",
          children: [
            {
              value: "2.1",
              label: "目录2.1",
              children: [
                {
                  value: "2.1.1",
                  label: "目录2.1.1",
                },
                {
                  value: "2.1.2",
                  label: "目录2.1.2",
                },
              ],
            },
            {
              value: "2.2",
              label: "目录2.2",
              children: [
                {
                  value: "2.2.1",
                  label: "目录2.2.1",
                },
              ],
            },
          ],
        },
        {
          value: "3",
          label: "目录3",
          children: [
            {
              value: "3.1",
              label: "目录3.1",
              children: [
                {
                  value: "3.1.1",
                  label: "目录3.1.1",
                },
              ],
            },
          ],
        },
        {
          value: "4",
          label: "目录4",
          children: [
            {
              value: "4.1",
              label: "目录4.1",
              children: [],
            },
            {
              value: "4.2",
              label: "目录4.2",
              children: [
                {
                  value: "4.2.1",
                  label: "目录4.2.1",
                },
              ],
            },
          ],
        },
      ],
      auditArr:[],
    };
  },

  mounted() {
    const targetValue = ['2.1.2','4.2.1','3.1.1'];
    this.auditArr=targetValue.map(item=>this.getParentList('value',item,this.DeptTree))
 
  },
  methods: {
    getParentList(keyNmame, code, tree) {

      // console.log('code =>', code);
      let arr = []; //要返回的数组
      for (let i = 0; i < tree.length; i++) {
        let item = tree[i];
        arr = [];
        arr.push(item[keyNmame]); //保存当前节点id
        if (code==item[keyNmame]) {
          //判断当前id是否是默认id
          return arr; //是则退出循环、返回数据
        } else {
          //否则进入下面判断,判断当前节点是否有子节点数据
          if (item.children && item.children.length > 0) {
            //合并子节点返回的数据
            arr = arr.concat(this.getParentList(keyNmame, code, item.children));
            if (arr.includes(code)) {
              //如果当前数据中已包含默认节点,则退出循环、返回数据
              return arr;
            }
          }
        }
      }
    },
  },
};
</script>
   
<style scoped ></style>

需要的同学可以把代码直接粘贴到自己demo中,验证使用!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Cascader 级联选择器的懒加载,一般是通过在 `load` 事件中异步加载子选项实现的。当用户选择某一选项时,会触发 `load` 事件,此时可以根据当前选中的选项,请求后台数据获取下一选项列表,然后更新 Cascader 的选项列表。 在懒加载时,如果需要回显已选中的选项,可以通过 `lazy` 属性配合 `value` 属性实现。`lazy` 属性表示是否启用懒加载模式,`value` 属性表示级联选择器的选中值,是一个数组。 以下是一个简单的示例: ```html <el-cascader v-model="selectedOptions" :options="options" :lazy="true" :value="selectedOptions" @load="handleLoad" ></el-cascader> ``` 在这个示例中,`selectedOptions` 是一个数组,用于绑定级联选择器的值。`options` 是一个数组,表示级联选择器的选项列表。`lazy` 属性设置为 `true`,表示启用懒加载模式。`value` 属性设置为 `selectedOptions`,表示级联选择器的选中值与 `selectedOptions` 绑定。 当用户选择某一选项时,会触发 `load` 事件,此时会调用 `handleLoad` 方法,该方法需要异步请求后台数据,获取下一选项列表,然后更新级联选择器的选项列表。在加载完成后,需要将 `selectedOptions` 设置为对应的数组,以便回显已选中的选项。以下是一个简单的 `handleLoad` 方法示例: ```js methods: { async handleLoad(selectedOptions) { const res = await axios.get('/api/cascader', { params: { selectedOptions: selectedOptions } }) const options = res.data // 更新级联选择器的选项列表 this.$set(selectedOptions[selectedOptions.length - 1], 'children', options) // 回显已选中的选项 this.selectedOptions = [...selectedOptions] } } ``` 在这个示例中,`handleLoad` 方法异步请求后台数据,获取下一选项列表,然后使用 `$set` 方法更新级联选择器的选项列表,最后将 `selectedOptions` 设置为对应的数组,以便回显已选中的选项。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值