3. 实现一个功能:多级组织机构的展示,后端给的接口数据 示例:[{id:2,name:”开发部”,parentId:1},……]。 描述从拿到数据+到+自定义树形组件绑定+的处理过程代码
时间: 2024-03-05 09:54:51 浏览: 19
首先,我们需要从后端接口获取到组织机构数据,可以使用axios库发送GET请求来获取数据。假设后端接口地址为"/api/organizations",我们可以这样获取数据:
```javascript
import axios from "axios";
axios.get("/api/organizations")
.then(response => {
const data = response.data;
// 对数据进行处理
})
.catch(error => {
console.log(error);
});
```
接下来需要将数据转换成树形结构,为了方便处理,我们可以先将数据转换成一个Map对象,key为id,value为该节点的信息:
```javascript
const dataMap = new Map();
data.forEach(item => {
dataMap.set(item.id, item);
});
```
接着遍历数据,将每个节点加入到其父节点的children数组中:
```javascript
const treeData = [];
data.forEach(item => {
const parent = dataMap.get(item.parentId);
if (parent) {
if (!parent.children) {
parent.children = [];
}
parent.children.push(item);
} else {
treeData.push(item);
}
});
```
现在我们已经得到了树形结构的数据,接下来就是将数据绑定到自定义树形组件上。假设我们的组件名为"Tree",可以这样使用:
```html
<template>
<div>
<Tree :data="treeData"></Tree>
</div>
</template>
<script>
import Tree from "@/components/Tree";
export default {
components: {
Tree,
},
data() {
return {
treeData: [], // 树形结构的数据
};
},
};
</script>
```
最后是自定义树形组件的代码,这里只提供一个简单的示例:
```html
<template>
<ul>
<li v-for="item in data" :key="item.id">
{{ item.name }}
<Tree v-if="item.children" :data="item.children"></Tree>
</li>
</ul>
</template>
<script>
export default {
props: {
data: {
type: Array,
required: true,
},
},
};
</script>
```
这个组件会递归渲染所有节点和子节点,如果某个节点有子节点,会再次渲染一个Tree组件来展示子节点。