el-tree与el-transfer结合成树形穿梭框(tree-transfer)

本文介绍了一种基于Element UI的树形穿梭框组件配置方法,包括如何设置数据结构、切换模式、监听添加与移除事件等关键步骤。此外,还提供了通讯录模式的使用说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下载
npm install el-tree-transfer --save
<tree-transfer 
        :title="['模块(菜单)访问权限', '拥有的操作权限']"
        :from_data='fromData'
        :to_data='toData'
        :defaultProps="{label:'label', children: 'children'}"
        @addBtn='add'
        @removeBtn='remove'
        :mode='mode'
        :pid="parentId"
        :style="{height: '75%'}"
        filter
        openAll>
        </tree-transfer>
import treeTransfer from 'el-tree-transfer' 
export default {
    components:{ treeTransfer },
    data(){
        return{
            parentId: 'parentId',
            mode: "transfer",
            fromData: [
                {
                id: "1",
                parentId: 0,
                label: "房源综合业务管理平台",
                children: [
                {
                    id: "1-1",
                    parentId: "1",
                    label: "首页",
                    children: []
                },{
                    id: "1-2",
                    parentId: "1",
                    label: "房源信息管理系统",
                    children: [
                    {
                        id: "1-2-1",
                        parentId: "1-2",
                        children: [],
                        label: "数据统计"
                    },{
                        id: "1-2-2",
                        parentId: "1-2",
                        children: [],
                        label: "房源信息管理"
                    },{
                        id: "1-2-3",
                        parentId: "1-2",
                        children: [],
                        label: "房源入库管理"
                    }]
                }]
            }],
            toData:[]
        }
    },
    methods:{
        // 切换模式 现有树形穿梭框模式transfer 和通讯录模式addressList
      changeMode() {
        if (this.mode == "transfer") {
          this.mode = "addressList";
        } else {
          this.mode = "transfer";
        }
      },
      // 监听穿梭框组件添加
      add(fromData,toData,obj){
        console.log("fromData:", fromData);
        console.log("toData:", toData);
        console.log("obj:", obj);
      },
      // 监听穿梭框组件移除
      remove(fromData,toData,obj){
        console.log("fromData:", fromData);
        console.log("toData:", toData);
        console.log("obj:", obj);
      }
    },
}
注意:

1, 标题 类型:Array 必填:false 默认:[“源列表”, “目标列表”]
2,设置模式,字段可选值为transfer|addressList 类型:String 必填:false 补充:mode默认为transfer模式,即树形穿梭框模式,可配置字段为addressList改为通讯录模式,通讯录模式时按钮不可自定义名字,如要自定义标题名在title数组传入四个值即可,addressList模式时标题默认为通讯录、收件人、抄送人、密送人
3,源数据 类型:Array 必填:true 补充:数据格式同element-ui tree组件,但必须有id和pid!!!!!!!!

### 使用 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()` 函数逻辑改为每次点击都清空之前的选取再存入新的选取。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值