uni-app 异步树插件需求

发布于 1周前 作者 sinazl 来自 Uni-App

uni-app 异步树插件需求

来个异步树插件就美了

3 回复

专业全栈开发 微信qq同号 990560853


加wx:设计UI,前端、后端,给你完整方案V:mingbocloud

uni-app 中实现异步树插件的需求,通常涉及从服务器获取节点数据,并动态地构建树形结构。下面是一个基本的实现思路和代码案例,利用 Vue.js 和 uni-app 框架。

实现思路

  1. 定义数据结构:树形结构的数据通常包含 idparent_idchildren 等字段。
  2. 异步获取数据:通过 API 请求从服务器获取节点数据。
  3. 构建树形结构:将扁平的数据转换为树形结构。
  4. 渲染树形组件:使用递归组件渲染树形结构。

代码案例

1. 数据结构和API请求

假设你的数据接口返回如下格式的 JSON 数据:

[
  {"id": 1, "parent_id": 0, "name": "Node 1"},
  {"id": 2, "parent_id": 1, "name": "Node 1.1"},
  {"id": 3, "parent_id": 0, "name": "Node 2"}
]

script 部分,定义一个方法来获取数据并构建树:

export default {
  data() {
    return {
      treeData: []
    };
  },
  methods: {
    async fetchTreeData() {
      const response = await uni.request({
        url: 'https://api.example.com/get-tree-data',
        method: 'GET'
      });
      this.treeData = this.buildTree(response.data);
    },
    buildTree(data, parentId = 0) {
      let result = [];
      data.forEach(item => {
        if (item.parent_id === parentId) {
          const children = this.buildTree(data, item.id);
          if (children.length) {
            item.children = children;
          }
          result.push(item);
        }
      });
      return result;
    }
  },
  mounted() {
    this.fetchTreeData();
  }
};

2. 递归组件渲染树

template 部分,定义一个递归组件来渲染树:

<template>
  <view>
    <tree-node v-for="node in treeData" :key="node.id" :node="node" />
  </view>
</template>

<script>
Vue.component('tree-node', {
  props: ['node'],
  template: `
    <view>
      <text>{{ node.name }}</text>
      <view v-if="node.children && node.children.length">
        <tree-node v-for="child in node.children" :key="child.id" :node="child" />
      </view>
    </view>
  `
});
</script>

总结

上述代码演示了如何在 uni-app 中实现一个异步树插件。首先,通过 API 请求获取数据,并将数据转换为树形结构。然后,使用递归组件来渲染树形结构。你可以根据实际需求进一步扩展和美化这个基础实现,比如添加节点点击事件、图标、样式等。

回到顶部