更新记录

1.0.0(2025-12-31) 下载此版本

  • 自定义数据加载函数
  • 字段映射配置
  • 面包屑导航
  • 兼容 H5、微信小程序

平台兼容性

uni-app(4.83)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- - - -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 快应用-华为 快应用-联盟
- - - - - - - - - -

tree-picker 树形选择器

简洁易用的树形选择器,支持自定义数据加载、字段映射、面包屑导航,零依赖纯原生实现。

平台兼容

✅ H5 ✅ 微信小程序

快速开始

<template>
  <view>
    <button @click="showPicker = true">选择</button>
    <tree-picker v-model:show="showPicker" :loadData="loadData" @select="" />
  </view>
</template>

<script setup>
import { ref } from 'vue';

const showPicker = ref(false);

// 数据加载函数
const loadData = async (parentId) => {
  // parentId 为 null 时加载根节点,否则加载子节点
  const res = await yourApi.getTreeData(parentId);
  return res.data; // 返回数组
};

const  = (item) => {
  console.log('选中:', item);
};
</script>

Props

参数 说明 类型 默认值
show 是否显示(支持 v-model:show) Boolean false
loadData 数据加载函数 Function -
title 标题 String 请选择
emptyText 空数据提示 String 暂无数据
idKey ID字段名 String id
nameKey 名称字段名 String name
childrenKey 子节点字段名 String children
leafKey 叶子节点标识字段名 String leaf

Events

事件名 说明 回调参数
update:show 显示状态改变 Boolean
select 选中项 Object

loadData 函数

参数parentId - 父节点ID(首次为 null)

返回:Promise,resolve 数据数组

数据格式

[
  {
    id: '1',           // 节点ID
    name: '广东省',    // 节点名称
    leaf: false,       // 是否叶子节点
    children: []       // 子节点(可选)
  }
]

字段映射

数据字段名不同时可配置映射:

<tree-picker
  v-model:show="showPicker"
  :loadData="loadData"
  idKey="value"
  nameKey="label"
  childrenKey="items"
  leafKey="isLeaf"
/>

完整示例

<template>
  <view class="page">
    <view class="result">
      <text>{{ selectedArea ? selectedArea.name : '未选择' }}</text>
    </view>
    <button @click="showPicker = true">选择地区</button>

    <tree-picker
      v-model:show="showPicker"
      title="选择地区"
      :loadData="loadData"
      @select=""
    />
  </view>
</template>

<script setup>
import { ref } from 'vue';

const showPicker = ref(false);
const selectedArea = ref(null);

const loadData = async (parentId) => {
  // 模拟接口请求
  await new Promise(resolve => setTimeout(resolve, 300));

  if (!parentId) {
    // 返回根节点
    return [
      { id: '1', name: '广东省', leaf: false },
      { id: '2', name: '浙江省', leaf: false }
    ];
  } else if (parentId == '1') {
    // 返回广东省的子节点
    return [
      { id: '11', name: '广州市', leaf: true },
      { id: '12', name: '深圳市', leaf: true }
    ];
  } else if (parentId == '2') {
    // 返回浙江省的子节点
    return [
      { id: '21', name: '杭州市', leaf: true },
      { id: '22', name: '宁波市', leaf: true }
    ];
  }
  return [];
};

const  = (item) => {
  selectedArea.value = item;
};
</script>

注意事项

  • loadData 必须返回 Promise
  • 叶子节点需设置 leaf: true
  • 零依赖,无需安装第三方库

License

MIT

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

暂无用户评论。