更新记录
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

收藏人数:
下载插件并导入HBuilderX
赞赏(0)
下载 12
赞赏 0
下载 12786114
赞赏 1833
赞赏
京公网安备:11010802035340号