elementui tree table父子节点关联

elementui tree table父子节点关联

  1. 给每个节点加属性parent,isChecked,获取id和节点数据的对象
  2. 使用 @select事件
  3. 点击时,递归使得子节点状态和当前状态一致
  4. 如果选中节点有父节点,递归判断父节点的子节点是否全部选中,如果全部选中则勾中,否则取消勾中状态
    代码后续加
el-table tree组件的子节点半选可以通过设置`node-key`属性和`check-strictly`属性来实现。其中,`node-key`属性用于指定节点的唯一标识符,`check-strictly`属性用于控制是否严格遵循子节点选中状态不关联的规则。 具体实现步骤如下: 1. 在 el-table-column 中设置 type 为 'selection',并设置 prop 为 'checked',用于控制节点的选中状态。 2. 在 el-table-column 中设置 type 为 'expand',用于控制节点的展开状态。 3. 在 el-table 中设置 :data 属性为树形数据源。 4. 在 el-table 中设置 :node-key 属性为节点的唯一标识符。 5. 在 el-table 中设置 :check-strictly 属性为 true,表示子节点选中状态不关联。 6. 在 el-table-column 中设置 scoped-slot="default",并在 slot-scope 中使用 el-checkbox 控制节点的选中状态。 示例代码如下: ```html <template> <el-table :data="data" :node-key="nodeKey" :check-strictly="true"> <el-table-column type="selection" prop="checked"></el-table-column> <el-table-column type="expand"></el-table-column> <el-table-column label="名称" prop="name"> <template slot-scope="{ row }"> <el-checkbox v-model="row.checked" @change="handleCheckChange(row)">{{ row.name }}</el-checkbox> </template> </el-table-column> </el-table> </template> <script> export default { data() { return { data: [ { id: 1, name: '节点1', children: [ { id: 2, name: '子节点1-1', children: [ { id: 3, name: '子节点1-1-1' }, { id: 4, name: '子节点1-1-2' } ] }, { id: 5, name: '子节点1-2' } ] }, { id: 6, name: '节点2', children: [ { id: 7, name: '子节点2-1' }, { id: 8, name: '子节点2-2' } ] } ], nodeKey: 'id' } }, methods: { handleCheckChange(row) { if (row.children) { row.children.forEach(child => { child.checked = row.checked }) } this.handleParentCheckChange(row) }, handleParentCheckChange(row) { const parent = this.getParentNode(row) if (parent) { const siblings = parent.children const checkedCount = siblings.filter(sibling => sibling.checked).length if (checkedCount === 0) { parent.checked = false parent.indeterminate = false } else if (checkedCount === siblings.length) { parent.checked = true parent.indeterminate = false } else { parent.checked = false parent.indeterminate = true } this.handleParentCheckChange(parent) } }, getParentNode(node) { const { data, nodeKey } = this const stack = [data[0]] while (stack.length) { const parent = stack.pop() if (parent[nodeKey] === node.parentId) { return parent } if (parent.children) { stack.push(...parent.children) } } } } } </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值