vue的自定义树形列表组件(及数据格式转换)
- 组件定义
子组件:
- 以下内容为普通扁平化格式转换成树形对象的方法
- 其中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},