treeselect组件选中父节点时获取子节点的id

HTML:

<template>
  <div>
    <treeselect
      :options="treeData"
      @select="handleSelect"
      placeholder="请选择"
    />
  </div>
</template>

JavaScript:

import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default {
  components: { Treeselect },
  data() {
    return {
      treeData: [
        {
          id: 1,
          label: "父节点",
          children: [
            { id: 2, label: "子节点1" },
            { id: 3, label: "子节点2" },
            { id: 4, label: "子节点3" },
          ],
        },
        // 其他节点
      ],
    };
  },
  methods: {
    handleSelect(selectedNode) {
      if (selectedNode.children) {
        const childIds = selectedNode.children.map((childNode) => childNode.id);
        console.log("子节点 ID:", childIds);
      }
    },
  },
};
### 排除顶层父节点的实现 为了在 `vue-treeselect` 中选中不包含顶层父节点,可以利用组件提供的配置选项来控制显示逻辑。具体来说,通过自定义 `normalizer` 函数可以在渲染前处理数据,从而达到过滤顶层父节点的效果。 #### 自定义 Normalizer 函数 正常情况下,`vue-treeselect` 的每一项都会被默认展示出来。但是可以通过设置 `normalizer` 属性来自定义每一条记录的表现形式以及决定哪些条目应该隐藏或修改[^2]。 ```javascript // 定义 normalizer 方法用于调整树状结构中的节点属性 const normalizer = node => { // 如果是顶级节点,则不返回该节点的信息,使其不在列表中显示 if (!node.parent) return null; // 返回其他所有子节点的数据保持不变 return { id: node.id, label: node.label || node.name, // 假设原始数据中有 name 字段作为标签名 children: node.children && node.children.length ? node.children.map(childNode => ({ ...childNode, parent: node.id })) : undefined }; }; ``` 此代码片段展示了如何创建一个名为 `normalizer` 的函数,在其中判断当前遍历到的是不是根级别的项目(即没有父级)。如果是的话就直接返回 `null` 来跳过它;如果不是则继续构建并返回完整的对象表示给前端界面使用。 #### 注册与应用 当完成了上述功能之后,还需要确保将这个新的 `normalizer` 应用到实际使用的场景当中去: ```html <template> <!-- 使用 treeselect 组件 --> <Treeselect v-model="selectedValue" :options="treeData" :normalizer="customNormalizer" /> </template> <script> export default { data() { return { selectedValue: [], treeData: [ /* 这里放置你的多层嵌套的对象数组 */ ], customNormalizer: (node) => { if (!node.parent) return null; const result = { id: node.id, label: node.label || node.name, children: node.children?.map((child) => ({...child, parent: node.id})) }; delete result.children; // 只保留叶子结点 return result; } }; }, } </script> ``` 这段模板和脚本部分说明了怎样把前面提到过的 `normalizer` 集成进来,并且还额外做了一步操作——删除所有的 `children` 键值对以保证最终只留下最底层的选择项供用户选取[^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值