element ui 级联选择器Cascader 实现一级菜单多选二级菜单单选

 <el-cascader class="w-100" v-model="list"
              :options="customsOptions" :props="cascaderProps"
              clearable @change="handleChange">
 </el-cascader>

//customsOptions:这个是级联选择器的数据源
// 级联选择器配置
const cascaderProps = {
  multiple: true, // 支持多选
  checkStrictly: false,  // 可以选择任意一级
  expandTrigger: 'hover',  // 悬浮展开
};

const list = ref([])
// 关区级联单选功能
const handleChange = (value:Array) => {

  const copyValue = cloneDeep(value)
  // 二级菜单单选的实现
  const checkList = [...copyValue].reverse()
  let list = []
  checkList.forEach((item) => {
    const flag = !list.some(
      (ci) => item[0] === ci[0] && item.length === ci.length
    )
    if (flag) list.push(item)
  })
  nextTick(()=>{
    list.value = list.reverse()
  })
})
### 实现 Element UI 级联选择器父项子项单选 为了实现Element UI级联选择器 (Cascader) 中父项支持而子项仅允许单选的功能,可以通过自定义 `props` 属性并结合 JavaScript 控制逻辑来达成目标。 #### 自定义 Cascader 组件配置 ```javascript <template> <el-cascader :options="options" v-model="selectedOptions" :props="cascaderProps" @change="handleChange"> </el-cascader> </template> <script> export default { data() { return { options: [ { value: 'zhinan', label: '指南', children: [] }, { value: 'component', label: '组件', children: [] } ], selectedOptions: [], cascaderProps: { multiple: true, checkStrictly: true // 允许半状态 } }; }, methods: { handleChange(value, selectedData) { const lastLevel = selectedData[selectedData.length - 1]; if (!lastLevel.children || !Array.isArray(lastLevel.children)) { this.selectedOptions = [value[value.length - 1]]; } else { let tempSelected = []; for (const item of this.options) { if (item.value === value[0]) { tempSelected.push(item); } } this.selectedOptions = [...tempSelected.map(i => i.value)]; } } } }; </script> ``` 此代码片段展示了如何设置 `multiple` 和 `checkStrictly` 参数以启用模式下的严格父子关系控制[^1]。当用户择了某个节点时,会触发 `handleChange` 方法,在这里可以根据当前的择路径判断是否为最后一层,并相应调整最终定的结果列表。 对于非叶子节点(即父项),保持其作为数组形式存储;而对于叶子节点,则只保留最后一个被中的项值。这样就实现了期望的行为——父项可,但每个分支下只能有一个子项被中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值