当前位置:首页 > 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 组件,安装后可直接使用:

<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. 自定义样式和事件处理

自定义实现方案

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

<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
分享给朋友:

相关文章

uniapp安装uview

uniapp安装uview

安装uView到UniApp项目 方法一:通过npm安装(推荐) 确保项目已初始化npm,在项目根目录执行以下命令: npm install uview-ui 在main.js文件中引入并注册uV…

uniapp旋转横屏

uniapp旋转横屏

实现横屏模式的方法 在UniApp中实现横屏模式,可以通过配置页面方向或使用CSS旋转实现。以下是两种常见方法: 修改manifest.json配置 在项目的manifest.json文件中…

uniapp分享到facebook

uniapp分享到facebook

使用uniapp分享到Facebook的方法 在uniapp中实现分享到Facebook功能,可以通过调用原生插件或使用第三方SDK。以下是具体实现方式: 安装Facebook SDK插件 在un…

uniapp视频

uniapp视频

uniapp视频开发基础 uniapp支持通过video组件实现视频播放功能,该组件兼容多端(H5、小程序、App等),基本用法如下: <template> <video…

uniapp可以用vant吗

uniapp可以用vant吗

uniapp中使用Vant组件库的可行性 Vant是专为Vue.js设计的移动端组件库,而uniapp是一个跨平台开发框架。两者并非原生兼容,但可通过以下方式实现部分Vant组件的使用。 方法一:…

uniapp特性

uniapp特性

uniapp的核心特性 跨平台开发 uniapp支持一套代码编译到多个平台,包括iOS、Android、H5、微信小程序、支付宝小程序、百度小程序、字节跳动小程序等。开发者无需为不同平台单独编写代码。…