el-cascader点击任意一级的label,并将菜单收起

本文档介绍了如何解决级联菜单在点击查询后不消失的问题,提出了两种方法。第一种方法是通过监听值变化关闭级联菜单,但存在性能消耗;第二种方法是暴露点击事件,直接关闭并赋值。这两种方案都实现了点击后级联菜单自动关闭的功能,同时避免了单选框的显示。

前言:需要一个级联菜单,点击任意一级就可以进行查询,然后级联菜单收起

根据element文档将checkStrictly设置为true就可以了:

可是问题又来了:1>以下级联菜单只能点击单选框生效   2>级联菜单选中后不消失,只能点击空白处才会消失

而我不需要单选框的出现,点击label直接选中,然后级联菜单消失

方法一:

选中让级联菜单收起:设置每次监听值变化的时候,把 dropDownVisible 属性设置为 false 即可(每次级联菜单的值有变化,就把级联菜单收起)

 watch: {
    handlerValue() {
      if (this.$refs.refHandle) {
        this.$refs.refHandle.dropDownVisible = false; //监听值发生变化就关闭它
      }
    }
  },

点击label选中:点击文本就让它自动点击前面的input就可以触发选择。

mounted() {
    setInterval(function() {
      document.querySelectorAll(".el-cascader-node__label").forEach(el => {
        el.onclick = function() {
          if (this.previousElementSibling) this.previousElementSibling.click();
        };
      });
    }, 1000);
  },

方法一虽然把问题解决了,但是比较消耗性能

方法二:

级联菜单页面上把点击方法暴露出来

点击把值赋给originValue,并让菜单收起

这样问题就解决了

 

在使用 `el-cascader` 组件时,如果希望实现 **选择任意一级选项支持单选功能**,可以通过配置 `props` 属性来实现这一需求。以下是具体配置方法和实现思路: ### 配置方法 1. **启用 `checkStrictly` 模式** Element UI 提供了 `checkStrictly` 属性,用于取消父节点之间的选中关联,从而允许用户单独选择任意一级的选项。该属性需要通过 `props` 传递,设置为 `true` 即可启用该模式。 ```html <el-cascader :props="{ checkStrictly: true }" :options="options" ></el-cascader> ``` 2. **设置单选模式** 在 `el-cascader` 中,默认情况下选择的是最后一级节点。如果希望允许用户选择任意一级节点但仍保持单选行为,可以通过绑定 `v-model` 来获取选中的值。 ```html <el-cascader v-model="selectedValue" :props="{ checkStrictly: true }" :options="options" ></el-cascader> ``` 3. **自定义选项值字段** 如果数据源中的唯一标识字段不是默认的 `value`,可以通过 `props` 中的 `value` 属性指定实际字段名。例如,使用 `id` 作为唯一标识符: ```html <el-cascader v-model="selectedValue" :props="{ checkStrictly: true, value: 'id' }" :options="options" ></el-cascader> ``` 4. **移除单选按钮(可选)** 如果希望去除默认的单选按钮样式,可以通过自定义 `popper-class` 属性结合 CSS 样式进行隐藏。例如: ```html <el-cascader v-model="selectedValue" :props="{ checkStrictly: true, value: 'id' }" :options="options" popper-class="custom-cascader" ></el-cascader> ``` 在 CSS 中定义 `.custom-cascader` 类以隐藏单选按钮: ```css .custom-cascader .el-radio { display: none; } ``` ### 代码示例 以下是一个完整的代码示例,展示了如何配置 `el-cascader` 以支持 **选择任意一级选项保持单选功能**: ```html <template> <div> <el-cascader v-model="selectedValue" :props="{ checkStrictly: true, value: 'id' }" :options="options" popper-class="custom-cascader" ></el-cascader> </div> </template> <script> export default { data() { return { selectedValue: [], options: [ { id: 1, label: '一级分类', children: [ { id: 2, label: '二分类', children: [ { id: 3, label: '三分类' } ] } ] } ] }; } }; </script> <style> .custom-cascader .el-radio { display: none; } </style> ``` ### 总结 通过设置 `checkStrictly: true` 可以解除父节点之间的选中依赖,实现选择任意一级的功能。同时,结合 `v-model` 和 `popper-class`,可以进一步控制选中行为和样式,达到 **单选模式下选择任意** 的效果。如果需要进一步自定义行为,例如点击文字即选中某个节点,可以参考通过 `querySelectorAll` 操作 DOM 元素的方式进行扩展 [^2]。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值