el-tree-transfer 穿梭框的使用踩坑

el-tree-transfer的数据处理

注意看下面的踩坑

一,标准用法

github文档:https://github.com/hql7/tree-transfer

1.使用组件
<tree-transfer :title="title" :from_data='fromData' :to_data='toData' :defaultProps="{label:'name'}" 
              @addBtn='add' @removeBtn='remove' :mode='mode' height='400px' width="660px" filter >
</tree-transfer>
2.定义组件中的数据
fromData:[
              {
                id: "330000",
                label: "浙江省 1",
                children: [
                  {
                    id: "330100",
                    label: "杭州市 1-1",
                    children: [
                      {
                        id: "330102",
                        children: [],
                        label: "上城区 1-1-1"
                      },{
                        id: "330103",
                        children: [],
                        label: "下城区 1-1-2"
                      }
                    ]
                  },  
                ]
              },
            ],
            toData:[],
移动数据时的方法:
// 监听穿梭框组件添加
          add(fromData,toData,obj){
            // 树形穿梭框模式transfer时,返回参数为左侧树移动后数据、右侧树移动后数据、移动的{keys,nodes,halfKeys,halfNodes}对象
            // 通讯录模式addressList时,返回参数为右侧收件人列表、右侧抄送人列表、右侧密送人列表
            console.log("fromData:", fromData);
            console.log("toData:", toData);
            console.log("obj:", obj);
          },
          // 监听穿梭框组件移除
          remove(fromData,toData,obj){
            // 树形穿梭框模式transfer时,返回参数为左侧树移动后数据、右侧树移动后数据、移动的{keys,nodes,halfKeys,halfNodes}对象
            // 通讯录模式addressList时,返回参数为右侧收件人列表、右侧抄送人列表、右侧密送人列表
            console.log("fromData:", fromData);
            console.log("toData:", toData);
            console.log("obj:", obj);
          },
3.当我们左边的选项移到右边的时候,右边显示的树形的结构,但是我想要取到每一个树级菜单下最后的子节点的对象
对toData数据进行处理,然后在显示在已选的菜单中
(这里向右侧移动后不是以树级方式显示的,是因为后端给我们的数据不是严格按照官网的数据格式来的,看下面的踩坑

 二、踩坑

1.后端给的数据无法渲染到左侧框中

2.数据添加到右侧之后,右侧数据不显示,左侧数据消失

3.右侧添加后的数据没有树级形式显示

回答:后端给的数据格式如下,所以要自定下

[{
    id: "310000"
    parentId: "100000"
    name: "上海"
    children: [{
        id: "310100"
        parentId: "310000"
        name: "上海市"
        children: [{id: "310101", parentId: "310100", name: "黄浦区", children: []},…]
}]        

代码如下:

<tree-transfer :title="title" :from_data='fromData' :to_data='toData'
             :defaultProps="{label:'name',children: 'children' }" :pid="parentId" 
              @addBtn='add' @removeBtn='remove' :mode='mode' height='400px' width="660px" filter >
            </tree-transfer>
props: {
      
    // el-tree node-key 必须唯一
    node_key: {
      type: String,
      default: "id"
    },
    // 自定义 pid参数名,因为后端给的参数名为parentId
    pid: {
      type: String,
      default: "parentId"
    },
    },

data(){
        return {         
          parentId:'parentId',
          title:['可选城市','未选城市'],
          fromData:[],
          toData:[]
        }
}

methods:{
   getAddress(){
       this.fromData.forEach(item =>{  //el-tree-transfer组件的第一个pid必须为0
                    item.parentId = 0 
                  })
   }
}

最后的效果:

 

posted @ 2020-12-11 16:19  程序员瑶琴  阅读(9793)  评论(4编辑  收藏  举报