vue Treeselect 下拉树 只能选择第N级元素

今天在项目中遇到一个需求,就是vue下拉树只能选择第三级选项,为了解决这个问题,查阅了官方文档

https://vue-treeselect.js.org/#disable-item-selection

 

然后看到isDisabled属性可以禁止选择,具体实现代码如下:

<treeselect 
   :disable-branch-nodes="true"
   :normalizer="normalizer" 
   v-model="formData.goodsTypeId" 
   :multiple="false" 
   :options="goodsType" 
   placeholder='请选择'>
   <label slot="option-label" slot-scope="{ node, shouldShowCount, count, labelClassName, 
     countClassName }">
          {{ node.label }}
    </label>
</treeselect>

如何给数据添加isDisabled属性呢?

自己尝试着在下拉树配置中添加了一下,竟然成功了

【提示】node这个对象包含的字段打印了一下,(这些数据是后台接口提供的)如下图展示:

【isLeaf】Y是叶子节点,N是分支节点【typeLevel】第?级

normalizer(node) {
   //去掉children=[]的children属性
   if(node.children && !node.children.length) {
      delete node.children;
   }
   if(node.isLeaf=='Y' && node.typeLevel!=3){
      node['isDisabled'] = true;
   }
   return {
      id: node.typeId,
      label: node.typeName,
      children: node.children,
   }             
},

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
你可以通过设置 `flattenSearchResults` 属性来实现只能选择第N元素的需求。具体实现方法如下: 首先,在 `treeselect` 标签中设置 `flattenSearchResults` 为 `true`,这样搜索结果将会以扁平化的形式展示出来。 然后,通过在 `treeselect` 标签中设置 `normalizer` 属性来控制每个选项的别。`normalizer` 是一个函数,它将每个选项的原始数据转换为一个对象,该对象包含 `id`、`label` 和 `level` 三个属性。 最后,你可以通过设置 `showCount` 属性来展示每个选项的子节点数量。这样用户就可以根据子节点数量来判断每个选项的别。 以下是一个示例代码: ```html <template> <div> <treeselect v-model="selectedNodes" :options="options" :flatten-search-results="true" :normalizer="normalize" :show-count="true" placeholder="请选择" /> </div> </template> <script> export default { data() { return { selectedNodes: [], options: [ { id: 1, label: '第一元素', children: [ { id: 2, label: '第二元素', children: [ { id: 3, label: '第三元素', children: [ { id: 4, label: '第四元素' }, { id: 5, label: '第四元素' } ] } ] } ] } ] } }, methods: { normalize(node) { return { id: node.id, label: node.label, level: this.getLevel(node) } }, getLevel(node) { let level = 0 while (node.parent) { level++ node = node.parent } return level } } } </script> ``` 在上面的示例代码中,我们通过 `normalizer` 函数将每个选项的原始数据转换为一个包含 `id`、`label` 和 `level` 三个属性的对象。`level` 属性表示每个选项的别。 然后,我们使用 `getLevel` 函数来计算每个选项的别。该函数使用一个 `while` 循环来计算选项的父数量,从而确定选项的别。 最后,我们将 `flattenSearchResults` 属性设置为 `true`,将 `normalizer` 属性设置为我们定义的 `normalize` 函数,将 `showCount` 属性设置为 `true`,这样就可以实现只能选择第 N 元素的需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值