当前位置:首页 > uni-app

uniapp 树形框

2026-02-05 23:11:46uni-app

uniapp 树形框实现方法

在 uniapp 中实现树形结构展示,可以通过以下几种方式:

使用 uni-list 和递归组件

创建一个递归组件来展示树形数据,结合 uni-list 进行样式控制:

<template>
  <view>
    <tree-node :node="treeData"></tree-node>
  </view>
</template>

<script>
export default {
  components: {
    TreeNode: {
      props: ['node'],
      template: `
        <view>
          <uni-list-item :title="node.label" @click="toggle">
            <template v-slot:footer>
              <uni-icons :type="node.expanded ? 'minus' : 'plus'"></uni-icons>
            </template>
          </uni-list-item>
          <view v-show="node.expanded" style="padding-left: 20px;">
            <tree-node 
              v-for="child in node.children" 
              :key="child.id" 
              :node="child">
            </tree-node>
          </view>
        </view>
      `,
      methods: {
        toggle() {
          this.node.expanded = !this.node.expanded
        }
      }
    }
  },
  data() {
    return {
      treeData: {
        id: 1,
        label: '根节点',
        expanded: true,
        children: [
          {
            id: 2,
            label: '子节点1',
            children: []
          },
          {
            id: 3,
            label: '子节点2',
            expanded: false,
            children: [
              {
                id: 4,
                label: '子子节点1',
                children: []
              }
            ]
          }
        ]
      }
    }
  }
}
</script>

使用第三方组件 uView UI 的 tree 组件

uView UI 提供了现成的 tree 组件,安装后可直接使用:

uniapp 树形框

<template>
  <view>
    <u-tree 
      :list="treeList" 
      :props="props"
      @node-click="nodeClick"
    ></u-tree>
  </view>
</template>

<script>
export default {
  data() {
    return {
      treeList: [
        {
          name: '根节点',
          id: 1,
          children: [
            {
              name: '子节点1',
              id: 2
            },
            {
              name: '子节点2',
              id: 3,
              children: [
                {
                  name: '子子节点1',
                  id: 4
                }
              ]
            }
          ]
        }
      ],
      props: {
        label: 'name',
        children: 'children'
      }
    }
  },
  methods: {
    nodeClick(node) {
      console.log('点击节点:', node)
    }
  }
}
</script>

使用插件市场组件

在 uni-app 插件市场搜索"树形组件",可以找到多种现成解决方案:

  1. 安装插件市场中的树形组件
  2. 按照插件文档引入组件
  3. 配置数据源和必要参数
  4. 自定义样式和事件处理

自定义实现方案

对于需要高度自定义的场景,可以完全自己实现:

uniapp 树形框

<template>
  <view>
    <view 
      v-for="item in treeData" 
      :key="item.id"
      :style="{paddingLeft: item.level * 15 + 'px'}"
    >
      <view @click="toggleExpand(item)">
        <text>{{item.expanded ? '▼' : '▶'}}</text>
        <text>{{item.label}}</text>
      </view>
      <tree-view 
        v-if="item.expanded && item.children" 
        :treeData="item.children"
      ></tree-view>
    </view>
  </view>
</template>

<script>
export default {
  name: 'TreeView',
  props: {
    treeData: Array
  },
  methods: {
    toggleExpand(item) {
      item.expanded = !item.expanded
    }
  }
}
</script>

树形框功能扩展

实现基础功能后,可以进一步添加以下特性:

  • 复选框支持:为每个节点添加 checkbox
  • 懒加载:点击节点时动态加载子节点数据
  • 拖拽排序:实现节点拖拽排序功能
  • 搜索过滤:根据输入内容过滤显示节点
  • 多选模式:支持同时选择多个节点

性能优化建议

对于大型树形结构,考虑以下优化措施:

  • 虚拟滚动:只渲染可视区域内的节点
  • 数据分片:分批加载节点数据
  • 节流处理:对展开/折叠等操作进行节流
  • 缓存机制:缓存已加载的节点数据

以上方法可根据具体需求选择或组合使用,实现符合项目要求的树形结构展示功能。

标签: uniapp
分享给朋友:

相关文章

uniapp使用npm

uniapp使用npm

uniapp中使用npm的方法 uniapp支持通过npm安装和管理第三方依赖包,以下是具体操作步骤: 安装Node.js环境 确保本地已安装Node.js(建议使用LTS版本),安装后会自动包含n…

uniapp中如何引用echarts

uniapp中如何引用echarts

在uniapp中引用echarts uniapp中引用echarts可以通过原生方式或第三方插件实现,以下是具体方法: 使用原生echarts 安装echarts依赖 在项目根目录下执行命令:…

引擎uniapp

引擎uniapp

uniapp 引擎概述 uniapp 是一个基于 Vue.js 的跨平台开发框架,允许开发者使用单一代码库构建多端应用(如 iOS、Android、Web、小程序等)。其核心引擎通过条件编译和运行时适…

uniapp公共弹窗

uniapp公共弹窗

uniapp公共弹窗的实现方法 在uniapp中实现公共弹窗通常涉及全局组件封装、状态管理以及动态调用。以下是几种常见方案: 封装全局组件 创建一个自定义弹窗组件(如common-popup.vue…

uniapp删除

uniapp删除

uniapp删除数据的方法 在uniapp中删除数据通常涉及前端操作和与后端API的交互。以下是常见的几种删除数据的方式: 前端数据删除 使用splice方法从数组中删除指定元素: let lis…

uniapp 极光推送

uniapp 极光推送

uniapp 集成极光推送的方法 在 uniapp 中集成极光推送需要结合原生插件或第三方 SDK,以下为具体实现方案: 使用 uniapp 官方提供的 jpush 插件 在 manifest.j…