el-table多选+树形table 使用toggleAllSelection全部勾选以后 只有父节点被勾选 父节点下的子节点都没被勾选 —— 已解决

el-table多选+树形table 使用全部勾选以后 只有父节点被勾选 父节点下的子节点都没被勾选
解决思路, toggleAllSelection只会对tree的第一层做勾选,我们需要递归子节点 来手动勾选
下面是代码片段

<el-table
				:data="treeData"
				style="width: 100%; margin-bottom: 20px; margin-top: 10px"
				row-key="id"
				border
				:tree-props="defaultProps"
				ref="dataTable"
				@selection-change="handleSelectionChange"
			>
				<el-table-column type="selection" width="55" />
				<el-table-column :prop="defaultProps.label" label="名称" sortable />
				<el-table-column :prop="defaultProps.value" label="值" sortable />
				<el-table-column :prop="defaultProps.originalType" label="原始类型" sortable />
				<el-table-column :prop="defaultProps.originalType" label="关系" sortable />
			</el-table>
			// 逻辑层
			// 触发的地方 也可以把mounted的代码放到渲染table环节中
	mounted() {
		this.$nextTick(() => {
					this.$refs.dataTable.toggleAllSelection()
					const event = new Event('selection-change', { bubbles: true, cancelable: true })
					this.$refs.dataTable.$el.dispatchEvent(event)
					console.log(this.$refs.dataTable.selection, '1  this.$refs.dataTable.selection')
					// this.handleSelectionChange(this.$refs.dataTable.selection)
				})
	},
	    
// handleSelectionChange对table做递归勾选, 其中我使用到了[children],如果你们是固定children不用加[]
	methods: {
		handleSelectionChange(rows) {
			let { children } = this.defaultProps
			const setChildSelected = (node, selected) => {
				if (node[children]) {
					node[children].forEach(child => {
						this.$refs.dataTable.toggleRowSelection(child, selected)
						setChildSelected(child, selected)
					})
				}
			}

			this.treeData.forEach(node => {
				if (rows.some(row => row === node)) {
					// 设置该节点选中
					this.$refs.dataTable.toggleRowSelection(node, true)
					setChildSelected(node, true)
				} else {
					// 取消该节点选中
					this.$refs.dataTable.toggleRowSelection(node, false)
					setChildSelected(node, false)
				}
			})
		}
	}

最后问题解决

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
`el-table` 是 Element UI 提供的一个用于展示表格数据的组件,它支持丰富的功能,包括多选功能。要实现勾选互斥选项(即一次只能选择一项或多项,但不能同时选择多项),你可以利用 `row-key` 和 `selection-method` 属性来定制选择行为。 **1. row-key**:设置每一行的唯一标识,当使用多选时,这个属性很重要,因为它是确定哪一行被选中的依据。如果你的表格数据中每个对象有一个独特的 ID,可以设置为 `row-key="id"`。 **2. selection-method**:这是一个自定义方法,用于控制如何根据用户的选择更新行的状态。你可以在这个方法中添加互斥逻辑,例如: ```javascript methods: { selectRow(row) { if (this.selectedRows.length > 0) { // 如果已选中其他项,取消当前项的选择 this.$refs.table.clearSelection(); this.selectedRows.forEach(row => row.isSelected = false); } // 添加新的选中项 row.isSelected = true; this.selectedRows.push(row); }, deselectRow(row) { // 如果当前项被选中,移除它 row.isSelected = false; const index = this.selectedRows.indexOf(row); if (index !== -1) { this.selectedRows.splice(index, 1); } }, } ``` **3. 在模板上绑定事件**: 在表格的每行单元格上绑定 `@click` 事件,调用对应的 `selectRow` 或 `deselectRow` 方法。 ```html <template> <el-table :data="tableData" ref="table" :row-key="rowKey" selection-method="selectRow" @select="handleSelect" @row-click="handleRowClick" > <!-- 表格列 --> </el-table> </template> ``` **
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颜笑·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值