• 组件定义

子组件:

<template>
<div>
<!– <h5>{{temp.tital}}</h5> –>
<el-button class=”filter-item” style=”margin-left: 1px;” size=”small” type=”primary” >{{temp.tital}}</el-button>
<el-input
size=”small”
placeholder=”输入关键字过滤分类”
v-model=”filterText”>
</el-input>
 

 

<el-tree
class=”filter-tree”
:data=”treeData”
:props=”defaultProps”
:node-key=”id”
default-expand-all
:filter-node-method=”filterNode”
ref=”tree2″
@node-click=”sendData”
>
</el-tree>
</div>
</template>

 

<script>
export default {
watch: {
filterText(val) {
this.$refs.tree2.filter(val);
}
},

 

methods: {
filterNode(value, data) {
if (!value) return true;
return data.name.indexOf(value) !== -1;
},
setTreeData(datass){//接收父组件的参数
this.temp.tital = datass.tital
this.treeData = datass;
},
sendData(obj, node, data){//向父组件发送参数
this.$emit(“sendTreeData”, obj)//”sendTreeData”这是父组件引用时定义的
 

 

}
},

 

data() {
return {
temp:{
tital:”哈哈哈”
},
filterText: ”,
data2: [{//这是tree型数据格式
id: 1,
label: ‘一级 1’,
children: [{
id: 4,
label: ‘二级 1-1’,
children: [{
id: 9,
label: ‘三级 1-1-1’
}, {
id: 10,
label: ‘三级 1-1-2’
}]
}]
}, {
id: 2,
label: ‘一级 2’,
children: [{
id: 5,
label: ‘二级 2-1’
}, {
id: 6,
label: ‘二级 2-2’
}]
}, {
id: 3,
label: ‘一级 3’,
children: [{
id: 7,
label: ‘二级 3-1’
}, {
id: 8,
label: ‘二级 3-2’
}]
}],
treeData:[],
defaultProps: {
children: ‘children’,
label: ‘name’

 

}
};
}
};
</script>
 
父组件调用子组件
<Mytreetable ref=”mytreedata” v-model=”temp.icon” @sendTreeData=”sendTreeObj” />
 
import Mytreetable from ‘@/components/MyTreeTable/index’
 
export default {
name: ‘ComplexTable’,
components: { Mytreetable },
 
//向子组件传递数据
this.$refs.mytreedata.setTreeData(treesss);
 
  • 以下内容为普通扁平化格式转换成树形对象的方法
  • 其中list的格式为
  • [
    {
    “id”: 100,
    “pId”: 0,
    “name”: “科技”,
    “title”: “科技”,
    “checked”: false,
    “open”: false,
    “nocheck”: false
    },
    {
    “id”: 101,
    “pId”: 100,
    “name”: “深圳总公司”,
    “title”: “深圳总公司”,
    “checked”: false,
    “open”: false,
    “nocheck”: false
    },
    {
    “id”: 102,
    “pId”: 100,
    “name”: “长沙分公司”,
    “title”: “长沙分公司”,
    “checked”: false,
    “open”: false,
    “nocheck”: false
    },
    {
    “id”: 103,
    “pId”: 101,
    “name”: “研发部门”,
    “title”: “研发部门”,
    “checked”: false,
    “open”: false,
    “nocheck”: false
    },
    {
    “id”: 104,
    “pId”: 101,
    “name”: “市场部门”,
    “title”: “市场部门”,
    “checked”: false,
    “open”: false,
    “nocheck”: false
    },
    {
    “id”: 105,
    “pId”: 101,
    “name”: “测试部门”,
    “title”: “测试部门”,
    “checked”: false,
    “open”: false,
    “nocheck”: false
    },
    {
    “id”: 106,
    “pId”: 101,
    “name”: “财务部门”,
    “title”: “财务部门”,
    “checked”: false,
    “open”: false,
    “nocheck”: false
    },
    {
    “id”: 107,
    “pId”: 101,
    “name”: “运维部门”,
    “title”: “运维部门”,
    “checked”: false,
    “open”: false,
    “nocheck”: false
    },
    {
    “id”: 108,
    “pId”: 102,
    “name”: “市场部门”,
    “title”: “市场部门”,
    “checked”: false,
    “open”: false,
    “nocheck”: false
    },
    {
    “id”: 109,
    “pId”: 102,
    “name”: “财务部门”,
    “title”: “财务部门”,
    “checked”: false,
    “open”: false,
    “nocheck”: false
    }
    ]

  • buildTree(list){
    let pidStr = ‘pId’;
    let idStr = ‘id’;
    let childrenStr = ‘children’;

    let listOjb = {}; // 用来储存{key: obj}格式的对象
    let treeList = []; // 用来储存最终树形结构数据的数组

    // 将数据变换成{key: obj}格式,方便下面处理数据
    for (let i = 0; i < list.length; i++) {
    listOjb[list[i][idStr]] = list[i]
    }

    for (let j = 0; j < list.length; j++) {
    // 判断父级是否存在
    let haveParent = listOjb[list[j][pidStr]]
    if (haveParent) {
    // 如果有没有父级children字段,就创建一个children字段
    !haveParent[childrenStr] && (haveParent[childrenStr] = [])
    // 在父级里插入子项
    haveParent[childrenStr].push(list[j])
    } else {
    // 如果没有父级直接插入到最外层
    treeList.push(list[j])
    }
    }
    return treeList
    },
 
 
 
 
 
 

版权声明:本文为braveLN原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/braveLN/p/11196603.html