el-tree只获取叶子节点
时间: 2024-12-27 21:13:16 浏览: 13
### 实现仅获取叶子节点数据
为了实现在 `el-tree` 组件中仅获取叶子节点的数据,可以利用 `getCheckedKeys()` 方法并传递参数 `{leafOnly: true}` 来确保只返回叶子节点的键值[^2]。
```javascript
// 获取所有选中的叶子节点ID
this.tenantIdMenus = this.$refs.subRoleTree.getCheckedKeys(true);
console.log(this.tenantIdMenus, '选中的叶子节点');
```
通过设置 `leafOnly` 参数为 `true`,能够过滤掉非叶子节点的选择状态,从而精确地获得用户所选中的叶子节点列表。
### 实现只能选中叶子节点功能
如果目标是在前端逻辑上限制用户的交互行为,即让用户无法勾选父级节点,则可以通过监听 `check-change` 事件来拦截这种操作,并手动调整选择状态:
```html
<el-tree
ref="subRoleTree"
:data="subRoleMenuList"
show-checkbox
node-key="id"
:props="defaultProps"
@check-change="handleCheckChange">
</el-tree>
```
```javascript
methods: {
handleCheckChange(data, checked, indeterminate) {
const treeInstance = this.$refs['subRoleTree'];
// 如果不是叶子节点并且被选中则取消其选中状态
if (!treeInstance.isLeaf(data.id) && checked === true){
setTimeout(() => {
treeInstance.setChecked(data.id, false);
});
}
}
}
```
这段代码会在每次发生勾选变化时触发回调函数,在其中判断当前改变的是不是一个叶子节点;如果不是的话就立即恢复未选中状态。注意这里使用了 `setTimeout` 来延迟执行反向设定动作,这是因为直接在同一轮事件循环里修改会引发冲突。
阅读全文