el-transfer和el-tree结合实现左右两边控制多选单选
时间: 2025-02-08 18:18:46 浏览: 185
### 使用 Element UI 的 `el-transfer` 和 `el-tree` 实现多选单选功能
为了实现带有左右转移列表并支持多选和单选的功能,可以利用 `el-transfer` 和 `el-tree` 这两个组件。通过自定义事件处理逻辑来控制选择行为。
#### HTML 结构
创建一个包含 `el-transfer` 和 `el-tree` 的模板结构[^2]:
```html
<template>
<div>
<!-- 左侧树形结构 -->
<el-transfer v-model="value" :data="data">
<template slot-scope="{ option }">
<el-tree
:data="[option]"
show-checkbox
node-key="id"
ref="treeLeft"
@check-change="handleCheckChange"
></el-tree>
</template>
</el-transfer>
<!-- 右侧已选项展示区 -->
<el-transfer direction="rtl" v-model="value" :data="data">
<template slot-scope="{ option }">
<span>{{ option.label }}</span>
</template>
</el-transfer>
</div>
</template>
```
#### JavaScript 部分
设置数据源以及监听节点变化的方法[^3]:
```javascript
<script>
export default {
data() {
return {
value: [], // 当前选中的项ID数组
treeData: [
/* 初始化左侧树的数据 */
],
selectedItems: [] // 记录右侧已经存在的项目防止重复添加
};
},
methods: {
handleCheckChange(data, checked, indeterminate) {
const key = this.$refs.treeLeft.getCheckedKeys();
if (checked && !this.selectedItems.includes(key)) {
this.value.push(...key);
this.selectedItems.push(...key);
}
if (!checked) {
this.value = this.value.filter(item => item !== key[0]);
this.selectedItems = this.selectedItems.filter(
item => item !== key[0]
);
}
}
}
};
</script>
```
此代码片段展示了如何结合使用这两个组件,并且实现了当用户勾选或取消勾选某个节点时自动更新到右边的选择框内;同时也考虑到了避免同一元素被多次加入的情况。
对于想要限制为仅能单选的情形,在上述基础上稍作修改即可:
- 移除 `show-checkbox` 属性使 Tree 不显示复选框;
- 修改 `handleCheckChange()` 函数逻辑改为每次点击都清空之前的选取再存入新的选取。
阅读全文
相关推荐


















