VUE无限级树状递归调用接口
时间: 2024-11-13 11:17:28 浏览: 5
在Vue.js中实现无限级树状数据结构的递归调用接口通常涉及以下几个步骤:
1. **数据模型**:首先,你需要定义一个树形的数据结构,包含节点信息(如id、name、children等),并且有一个标志字段(比如`loadMore`)用于标记是否还有更多子节点需要加载。
```javascript
data() {
return {
treeData: [], // 初始为空数组
loadChildrenLoading: false, // 加载子节点状态
nodeLoadLimit: 5, // 每次加载的子节点数量
};
}
```
2. **请求接口**:当你点击某个展开按钮或者首次初始化时,调用获取当前节点所有子节点的API。同时,设置`loadChildrenLoading`为true表示正在加载。
```javascript
methods: {
loadNodeChildren(node) {
this.loadChildrenLoading = true;
axios.get(`/api/node/${node.id}`)
.then(response => {
const newNodes = response.data;
this.treeData.push(...newNodes);
// 更新节点的children并设置loadMore为新节点的数量
node.children = newNodes;
if (newNodes.length < this.nodeLoadLimit || !newNodes.length) {
this.loadChildrenLoading = false; // 如果已加载完或者无更多数据,停止加载
} else {
this.loadNextLevel(node); // 有更多子节点,继续下一级加载
}
})
.catch(error => {
console.error('Failed to load children:', error);
this.loadChildrenLoading = false;
});
},
loadNextLevel(node) { // 递归调用
if (!node || !node.loadMore) return;
this.loadNodeChildren(node);
},
}
```
3. **模板部分**:在模板中,通过v-for遍历树结构,并添加展开和折叠功能。当节点加载状态改变时,更新UI。
```html
<template>
<ul>
<li v-for="node in filteredTreeData" :key="node.id">
{{ node.name }}
<!-- 添加展开和折叠图标 -->
<span @click="loadNodeChildren(node)" v-if="!node.isExpanded">
<i class="fa fa-plus"></i>
</span>
<span v-if="node.isExpanded">
<i class="fa fa-minus"></i>
</span>
<ul v-if="node.children && !node.isLoading">
<li v-for="child in node.children" :key="child.id">{{ child.name }}</li>
</ul>
</li>
</ul>
</template>
<script>
export default {
computed: {
filteredTreeData() {
return this.treeData.filter(n => n.loadMore && !n.isLoading);
},
},
};
</script>
```
4. **生命周期钩子**:如果有必要,你可以在适当的时候(如组件挂载或数据变化)初始化顶层节点的加载,或者添加滚动监听事件来触发动态加载。
阅读全文