vue elementui-tree树形,父节点与其子节点全选中 父节点显示选中状态但不传父节点 只传选中的 子节点值给后端
时间: 2024-03-06 11:46:50 浏览: 100
如果您使用的是 Element UI 的 Tree 组件,可以通过监听 Tree 的 `node-click` 事件和 `check-change` 事件来实现您的需求。
首先,在 Tree 组件中,可以使用 `node-key` 属性来指定节点的唯一标识符,这里假设我们使用 `id` 作为节点的唯一标识符。然后,在 `check-change` 事件中,可以通过 `checkedNodes` 属性获取到所有被选中的节点,以及它们的父节点和子节点。接着,通过循环遍历 `checkedNodes`,将所有被选中的子节点的 `id` 值存储到一个数组中,最后将该数组传递给后端即可。
示例代码如下:
```html
<template>
<el-tree
:data="data"
:node-key="nodeKey"
show-checkbox
@check-change="handleCheckChange"
@node-click="handleNodeClick"
></el-tree>
</template>
<script>
export default {
data() {
return {
data: [
{
id: 1,
label: '父节点1',
children: [
{
id: 11,
label: '子节点1-1'
},
{
id: 12,
label: '子节点1-2'
}
]
},
{
id: 2,
label: '父节点2',
children: [
{
id: 21,
label: '子节点2-1'
},
{
id: 22,
label: '子节点2-2'
}
]
}
],
nodeKey: 'id',
checkedIds: []
}
},
methods: {
handleCheckChange(checkedNodes) {
const checkedIds = []
checkedNodes.forEach((node) => {
if (node.children) {
// 如果是父节点,则将所有子节点的 id 放入 checkedIds 数组中
node.children.forEach((child) => {
checkedIds.push(child.id)
})
} else {
// 如果是子节点,则将该节点的 id 放入 checkedIds 数组中
checkedIds.push(node.id)
}
})
this.checkedIds = checkedIds
},
handleNodeClick(node) {
// 点击父节点时,取消该节点的选中状态
if (node.children) {
this.$refs.tree.setChecked(node, false)
}
}
}
}
</script>
```
在上面的代码中,我们通过 `handleCheckChange` 方法来处理 `check-change` 事件。在该方法中,我们首先定义一个空数组 `checkedIds`,然后遍历所有被选中的节点,如果该节点是父节点,则将其所有子节点的 `id` 值存储到 `checkedIds` 数组中;如果该节点是子节点,则将其 `id` 值存储到 `checkedIds` 数组中。最后,将 `checkedIds` 数组赋值给 `this.checkedIds`,该数组即为选中的子节点的 `id` 值数组。
另外,为了实现父节点选中但不传参的功能,在 `node-click` 事件中,我们监听父节点的点击事件,并将其选中状态设置为 false,这样即可实现父节点选中但不传参的效果。
希望这些信息能对您有所帮助!
阅读全文