uniapp 无限级树形结构面包屑、单选-多选、搜索、移除功能插件,基于【虚拟列表】高性能渲染海量数据,加入动态高度、缓冲区

本文主要是介绍uniapp 无限级树形结构面包屑、单选-多选、搜索、移除功能插件,基于【虚拟列表】高性能渲染海量数据,加入动态高度、缓冲区,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

hyq-tree-vtw

无限级树形结构面包屑、单选-多选、搜索、移除功能

示例项目

示例项目

单选-user

单选只选user

单选-任意一项

单选任意选择

多选-关联下级

多选关联下级

多选-任意一项

多选任选一级

已选择数据弹框

已选数据

说明

  • 本插件需要使用uni-popup、uni-transition用于已选择数据弹框,因此需要有这些依赖,请自行导入
  • 本插件基于【虚拟列表】高性能渲染海量数据,加入动态高度、缓冲区
  • 本人只在微信小程序端和H5 使用Chrome浏览器测试和微信开发者工具

安装方式

本组件符合easycom规范,HBuilderX 3.1.0起,只需将本组件导入项目,在页面template中即可直接使用,无需在页面中import和注册`components

基本用法

  <hyq-tree-vtwlabel="label"children="children"key-code="keyCode":tree-node="treeNode":feed-back-list="feedBackList"is-checkshow-search@handleConfirm="handleConfirm"></hyq-tree-vtw>

<script>import {treeNode} from './data.js'export default {data() {return {treeNode,feedBackList: []}},methods: {handleConfirm(val) {console.log('val', val)}}}
</script>

dat.js 数据生成

const treeNode = [{name: '一级',id: '1',user: false,children: [{name: '二级-1',id: '2-1',user: false,children: [{name: '三级-1',id: '3-1',user: false,children: [{name: '四级-1',id: '4-1',user: false,children: [{name: '五级-1',id: '5-1',user: false,children: [{name: '六级-1',id: '6-1',user: true,children: []},...makeTreeNode(5)]},...makeTreeNode(4)]},...makeTreeNode(3)]},...makeTreeNode(2)],},...makeTreeNode(1)]},{name: '一级-2',id: '1-1-1',user: false,children: [{name: '1-二级-1',id: '1-6-1665',user: false,children: [{name: '1-三级-1',id: '1-5-1',user: false,children: [{name: '1-四级-1',id: '1-6-166',user: true,children: [...makeTreeNode('1-四级-1')]},...makeTreeNode('1-三级-1')]},...makeTreeNode('2-1')]},...makeTreeNode('1-1')]},
]function makeTreeNode(leval) {let treeNoneList = []for (let k = 0; k < 100; k++) {let name = `${leval}级-${k}`treeNoneList.push({name,id: guid(),user: true})}return treeNoneList
}function guid() {function S4() {return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);}return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
}export {treeNode
};

传入的数据结构说明-treeNode

[{id: 664214366998,name: "校长443",children: [{id: 885655454545454545678,name: "小陆"}]},
]

选中返回的结果feedBackList:返回一个二维数组

[{id: xxx,name: "xxx",path:[],//该值的路径},
]

功能说明

1、树形结构展示

2、包含搜索框、面包屑导航

3、单选模式(只选user)、单选模式(选择任意一项)、多选模式(关联下级)、多选模式(选择任意一项)

4、只需传checkList字段就可以回显默认选中

5、已选数据可以进行移除

属性

属性名类型默认值说明
isCheckBooleanfalse是否选中
showSearchBooleanfalse是否开启搜索
keyCodeStringid数据唯一标识(id列的属性名)
labelStringname指定选项标签为选项对象的某个属性值
childrenStringchildren指定选项的子选项为选项对象的某个属性值
treeNodeArray[]trees 传入的树形结构,每个对象必须包含唯一的id值
multipleBooleanfalse是否开启多选模式
nodesBooleanfalse是否开启单选模式的只选择子项,true :只选子项、false:任意一项
hasPathBooleanfalse是否开启选中的数据包含路径
checkStrictlyBooleanfalse多选模式下是否要关联下级
feedBackListArray[]选中的列表

事件

事件名说明返回值
@handleConfirm点击完成按钮时触发事件参数(选中的项值)
@confirmSearch搜索完成后触发事件参数(搜索结果的项值)

单选模式(只选user)

<template><view class="content"><hyq-tree-vtw :label="dprop.label" :children="dprop.children" :key-code="dprop.keyCode":has-path="dprop.hasPath" :nodes="dprop.nodes" :multiple="dprop.multiple":checkStrictly="dprop.checkStrictly" :tree-node="treeNode" :feed-back-list="feedBackList" is-checkshow-search @handleConfirm="handleConfirm"></hyq-tree-vtw></view>
</template><script>import {treeNode} from './data.js'export default {data() {return {treeNode,feedBackList: [],dprop: { //单选模式选userlabel: 'name',children: 'children',keyCode: 'id',multiple: false,nodes: true,hasPath: false}}},onLoad() {},methods: {handleConfirm(val) {console.log('val', val);// 获取上一个页面var pages = getCurrentPages(); //当前页面栈var beforePage = pages[pages.length - 2]; //获取上一个页面实例对象beforePage.$vm.setConfirmData(val); //触发上一个页面中的update方法}}}
</script><style>
</style>

单选模式(选择任意一项)

<template><view class="content"><hyq-tree-vtw :label="cprop.label" :children="cprop.children" :key-code="cprop.keyCode":has-path="cprop.hasPath" :nodes="cprop.nodes" :multiple="cprop.multiple":checkStrictly="cprop.checkStrictly" :tree-node="treeNode" :feed-back-list="feedBackList" is-checkshow-search @handleConfirm="handleConfirm"></hyq-tree-vtw></view>
</template><script>import {treeNode} from './data.js'export default {data() {return {treeNode,feedBackList: [],cprop: { //单选模式(任意一项)label: 'name',children: 'children',keyCode: 'id',multiple: false,nodes: false,hasPath: false}}},onLoad() {},methods: {handleConfirm(val) {console.log('val', val);// 获取上一个页面var pages = getCurrentPages(); //当前页面栈var beforePage = pages[pages.length - 2]; //获取上一个页面实例对象beforePage.$vm.setConfirmData(val); //触发上一个页面中的update方法}}}
</script><style>
</style>

多选模式(关联下级)

<template><view class="content"><hyq-tree-vtw :label="bprop.label" :children="bprop.children" :key-code="bprop.keyCode":has-path="bprop.hasPath" :nodes="bprop.nodes" :multiple="bprop.multiple":checkStrictly="bprop.checkStrictly" :tree-node="treeNode" :feed-back-list="feedBackList" is-checkshow-search @handleConfirm="handleConfirm"></hyq-tree-vtw></view>
</template><script>import {treeNode} from './data.js'export default {data() {return {treeNode,feedBackList: [],bprop: {label: 'name',children: 'children',keyCode: 'id',multiple: true,checkStrictly: true,hasPath: false}}},onLoad() {},methods: {handleConfirm(val) {console.log('val', val);// 获取上一个页面var pages = getCurrentPages(); //当前页面栈var beforePage = pages[pages.length - 2]; //获取上一个页面实例对象beforePage.$vm.setConfirmData(val); //触发上一个页面中的update方法}}}
</script><style>
</style>

多选模式(选择任意一项)

<template><view class="content"><hyq-tree-vtw :label="aprop.label" :children="aprop.children" :key-code="aprop.keyCode":has-path="aprop.hasPath" :nodes="aprop.nodes" :multiple="aprop.multiple":checkStrictly="aprop.checkStrictly" :tree-node="treeNode" :feed-back-list="feedBackList" is-checkshow-search @handleConfirm="handleConfirm"></hyq-tree-vtw></view>
</template><script>import {treeNode} from './data.js'export default {data() {return {treeNode,feedBackList: [],aprop: {label: 'name',children: 'children',keyCode: 'id',multiple: true,hasPath: false}}},onLoad() {},methods: {handleConfirm(val) {console.log('val', val);// 获取上一个页面var pages = getCurrentPages(); //当前页面栈var beforePage = pages[pages.length - 2]; //获取上一个页面实例对象beforePage.$vm.setConfirmData(val); //触发上一个页面中的update方法}}}
</script><style>
</style>

github源码地址

github

vue2版本已发布到uniapp插件市场

vue2

vue3版本已发布到uniapp插件市场

vue3

掘金

掘金

这篇关于uniapp 无限级树形结构面包屑、单选-多选、搜索、移除功能插件,基于【虚拟列表】高性能渲染海量数据,加入动态高度、缓冲区的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/570376

相关文章

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

java获取图片的大小、宽度、高度方式

《java获取图片的大小、宽度、高度方式》文章介绍了如何将File对象转换为MultipartFile对象的过程,并分享了个人经验,希望能为读者提供参考... 目China编程录Java获取图片的大小、宽度、高度File对象(该对象里面是图片)MultipartFile对象(该对象里面是图片)总结java获取图片

SpringBoot整合DeepSeek实现AI对话功能

《SpringBoot整合DeepSeek实现AI对话功能》本文介绍了如何在SpringBoot项目中整合DeepSeekAPI和本地私有化部署DeepSeekR1模型,通过SpringAI框架简化了... 目录Spring AI版本依赖整合DeepSeek API key整合本地化部署的DeepSeek

Redis存储的列表分页和检索的实现方法

《Redis存储的列表分页和检索的实现方法》在Redis中,列表(List)是一种有序的数据结构,通常用于存储一系列元素,由于列表是有序的,可以通过索引来访问元素,因此可以很方便地实现分页和检索功能,... 目录一、Redis 列表的基本操作二、分页实现三、检索实现3.1 方法 1:客户端过滤3.2 方法

Python实现多路视频多窗口播放功能

《Python实现多路视频多窗口播放功能》这篇文章主要为大家详细介绍了Python实现多路视频多窗口播放功能的相关知识,文中的示例代码讲解详细,有需要的小伙伴可以跟随小编一起学习一下... 目录一、python实现多路视频播放功能二、代码实现三、打包代码实现总结一、python实现多路视频播放功能服务端开

Java使用POI-TL和JFreeChart动态生成Word报告

《Java使用POI-TL和JFreeChart动态生成Word报告》本文介绍了使用POI-TL和JFreeChart生成包含动态数据和图表的Word报告的方法,并分享了实际开发中的踩坑经验,通过代码... 目录前言一、需求背景二、方案分析三、 POI-TL + JFreeChart 实现3.1 Maven

Java导出Excel动态表头的示例详解

《Java导出Excel动态表头的示例详解》这篇文章主要为大家详细介绍了Java导出Excel动态表头的相关知识,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录前言一、效果展示二、代码实现1.固定头实体类2.动态头实现3.导出动态头前言本文只记录大致思路以及做法,代码不进