树形结构下拉框组件vue-treeselect的使用(安装、模糊匹配、单选、多选、延迟加载、异步搜索等)

一、基本使用流程

  1. 首先npm安装依赖
npm install @riophae/vue-treeselect --save
  1. 然后在需要使用的组件中引入
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
  1. 声明组件
components: { Treeselect }
  1. 使用
 <treeselect:options="dataList"     //接受数组placeholder="请选择"v-model="value"
/>

二、示例代码

1. 示例一

<template><div><treeselect v-model="deptIds" :options="deptList" :multiple="true" :disable-branch-nodes="false":clear-on-select="true" :flat="true" :show-count="true" placeholder="请选择" /></div>
</template><script>import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";export default {components: {Treeselect},data() {return {deptList: [{id: 1,label: 'a',children: [{id: 4,label: 'aa',children: [{id: 6,label: 'aaa',}],}],},{id: 2,label: 'b',children: [{id: 5,label: 'bb',}],},{id: 3,label: 'c',children: [],},],deptIds: [],};},created() {},methods: {},
};
</script><style scoped></style>

2. 示例二

<!-- Vue SFC -->
<template><div id="app" :dir="rtl ? 'rtl' : 'ltr'"><!--  :auto-load-root-options="false" 装载时自动加载根选项。当设置为false时,将在打开菜单时加载根选项。 --><!-- :append-to-body="appendToBody" , 有时候下拉数据不显示,可以添加这个属性,然后配合下面的样式 vue-treeselect__placeholder ; vue-treeselect__menu-container --><treeselectv-model="value":options="options":normalizer="normalizer":multiple="multiple":append-to-body="appendToBody":flat="flat":show-count="showCount"placeholder="请选择":load-options="loadOptions":flatten-search-results="false"><!-- 自定义选项标签 --><!-- node -标准化的节点对象(请注意,这与您从normalizer() 返回的内容不同)count & shouldShowCount - 计数数字和布尔值指示是否应显示计数labelClassName & countClassName - CSS类名,用于使样式正确 --><labelslot="option-label"slot-scope="{node,shouldShowCount,count,labelClassName,countClassName,}":class="labelClassName">{{ node.isBranch ? "Branch" : "Leaf" }}: {{ node.label }}<span v-if="shouldShowCount" :class="countClassName">({{ count }})</span>{{ showNode(node) }}</label><!-- 自定义值标签 --><div slot="value-label" slot-scope="{ node }">{{ node.raw.name }}(自定义)</div></treeselect><el-button type="primary" @click="submit" style="margin-top: 20px">确认</el-button></div>
</template><script>
// 引入组件和样式
// import the component
import Treeselect from "@riophae/vue-treeselect";
// import the styles
import "@riophae/vue-treeselect/dist/vue-treeselect.css";// -------------------延迟加载相关-------------------------
import { LOAD_CHILDREN_OPTIONS } from "@riophae/vue-treeselect";
//我们只是在这里使用“setTimeout()”来模拟异步操作
//而不是为了演示目的而请求真正的API服务器。
const simulateAsyncOperation = (fn) => {setTimeout(fn, 2000);
};export default {// register the component 注册组件components: { Treeselect },name: "VueTreeselect",data() {return {// define the default value 默认绑定值value: null,// define options  默认选项列表options: [{key: "1",name: "测试1",subOptions: [{key: "1-1",name: "测试1-1",// 默认情况下是否应展开此文件夹选项。isDefaultExpanded: true,subOptions: [{key: "1-1-1",name: "测试1-1-1",// 用于为新节点赋予不同的颜色。isNew: true,},{key: "1-1-2",name: "测试1-1-2",},],},{key: "1-2",name: "测试1-2",},],},{key: "2",name: "测试2",subOptions: [{key: "2-1",name: "测试2-1",},{key: "2-2",name: "测试2-2",},],},{key: "3",name: "测试3",// Declare an unloaded branch node. 声明一个已卸载的分支节点subOptions: null,hasChildren: "success",},{key: "4",name: "测试4",// isDisabled: true在任何叶节点或分支节点上进行设置来禁用项目选择isDisabled: true,},{key: "5",name: "测试5",// Declare an unloaded branch node.subOptions: null,hasChildren: "no-children",},{key: "6",name: "测试6",// Declare an unloaded branch node.subOptions: null,hasChildren: "failure",},],// --------------------------------------属性配置------------------------------------------------------// 是否多选,默认falsemultiple: true,// 是否显示重置值的“×”按钮,默认trueclearable: true,// 是否启用搜索功能。默认truesearchable: true,// 是否禁用控制 (整体禁用)。默认falsedisabled: false,// 单击控件时是否自动打开菜单。默认trueopenOnClick: true,// 控件聚焦时是否自动打开菜单。 默认falseopenOnFocus: true,// 选择选项后是否清除搜索输入。仅在以下情况下使用:multiple=“true”。对于单选模式,无论道具值如何,它总是在选择后清除输入。clearOnSelect: true,// 选择一个选项后是否关闭菜单。仅在以下情况下使用:multiple=“true”。closeOnSelect: true,// 菜单是否应始终打开。alwaysOpen: false,// 将菜单附加到<body/>appendToBody: true,// 是否阻止选择分支节点disableBranchNodes: false,// 是否启用平面模式 (相当于父子节点分离)flat: true,// 是否在每个分支节点的标签旁边显示子计数showCount: true,// 控制文字显示,左对齐,还是右对齐rtl: false,// 限制所选选项的显示。其余部分将隐藏在limitText字符串中。limit: 10,// 默认展开几层DefaultExpandLevel: 0,// 巢状搜寻 该模式禁用了模糊匹配功能,以避免不匹配。searchNested: false,// 搜索时展平树  :flatten-search-results="true"flattenSearchResults: true,//防止价值组合// "ALL" - 选中的所有节点都将包含在 value 数组中// "BRANCH_PRIORITY"(默认)-如果选中了分支节点,则其所有后代将被排除在value 数组之外// "LEAF_PRIORITY" - 如果选中了分支节点,则此节点本身及其分支后代将从value阵列中排除,但其叶后代将包括在内// "ALL_WITH_INDETERMINATE" -选中的任何节点将包括在value 数组中,另外还有不确定的节点valueConsistsOf: "BRANCH_PRIORITY",// 平面模式和排序值 (选中的值的显示顺序)  :sort-value-by="sortValueBy"// "ORDER_SELECTED" (默认)-选择订单 (按照选中的顺序)// "LEVEL" - 选择级别: C 🡒 BB 🡒 AAA (根据层级排序)// "INDEX" - 选项索引: AAA 🡒 BB 🡒 C  (根据索引排序)sortValueBy: "ORDER_SELECTED",// 是否启用异步搜索模式  :async="true"async:false};},methods: {// 自定义键名:用于规范化源数据normalizer(node) {// console.log(node, "node");return {id: node.key,label: node.name,children: node.subOptions,};},// 查看一下node里面有那些属性showNode(node) {console.log(node, "node");},// 延迟加载// 通过设置声明一个卸载的分支节点children: null// 添加 loadOptions // 每当卸载的分支节点被扩展时,  loadOptions({ action, parentNode, callback, instanceId }) 都会被调用,// 然后您就可以执行从远程服务器请求数据的作业loadOptions({ action, parentNode, callback }) {console.log(action, "action");console.log(parentNode, "parentNode");console.log(callback, "callback");if (action === LOAD_CHILDREN_OPTIONS) {switch (parentNode.hasChildren) {case "success": {simulateAsyncOperation(() => {parentNode.subOptions = [{key: "child",name: "Child option",},];callback();});break;}case "no-children": {simulateAsyncOperation(() => {parentNode.subOptions = [];callback();});break;}case "failure": {simulateAsyncOperation(() => {callback(new Error("Failed to load options: network error."));});break;}default: /* empty */}}},// 查看选中的数据submit() {console.log(this.value, "查看选中的数据");},},
};
</script><style> 
/* 修改字体大小 */
.vue-treeselect__placeholder {color: #bdbdbd;font-size: 14px;
}/* 浮层内部样式 写在全局中 浮层被加入到了body里 */
.vue-treeselect__menu-container {font-size: 14px;color: #333;font-weight: 400;
}
</style>

三、效果图

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/418977.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JDK 动态代理(Spring AOP 的原理)(面试重点)

代理模式 也叫委托模式.定义&#xff1a;为其他对象提供⼀种代理以控制对这个对象的访问.它的作⽤就是通过提供⼀个代理类,让我们 在调⽤⽬标⽅法的时候,不再是直接对⽬标⽅法进⾏调⽤,⽽是通过代理类间接调⽤&#xff0c;在某些情况下,⼀个对象不适合或者不能直接引⽤另⼀个对…

为什么 HTTPS 协议能保障数据传输的安全性?

HTTP 协议 在谈论 HTTPS 协议之前&#xff0c;先来回顾一下 HTTP 协议的概念。 HTTP 协议介绍 HTTP 协议是一种基于文本的传输协议&#xff0c;它位于 OSI 网络模型中的应用层。 HTTP 协议是通过客户端和服务器的请求应答来进行通讯&#xff0c;目前协议由之前的 RFC 2616 拆…

电压检测芯片适用于哪些应用领域?

原文链接&#xff1a; 电压检测芯片适用于哪些应用领域&#xff1f; - 知乎 (zhihu.com) 电压检测基本涉及到电子世界的方方面面。 我上一份工作是做无人机飞控研发&#xff0c;无人机在使用过程中是需要事件监测电压的&#xff0c;还需要针对电压对航行进行预估&#xff0c;…

WebDriverWait太强大

selenium webdriver及wait 1 implicitly包打天下2 Linkedin无法登录返回值很乱&#xff0c;怎么破&#xff1f; 1 implicitly包打天下 有了implicitly之后&#xff0c;基本上不再关注网速之类的影响。 self.driver.implicitly_wait(511)2 Linkedin无法登录返回值很乱&#xf…

.net core 6 集成nacos的服务注册和配置中心

1、安装nuget包 2、加上配置文件 "nacos": {"ServerAddresses": [ "http://127.0.0.1:8848" ],"GroupName": "DEFAULT_GROUP","ClusterName": "DEFAULT","ServiceName": "webapi"…

MySQL锁机制与优化实践

数据库乐观和悲观锁 乐观锁 比如在数据库中设置一个版本字段&#xff0c;每操作一次&#xff0c;都会将这行对应的版本号1&#xff0c;这样下次更新都会拿到最新的版本号更新&#xff0c;如果一个事务拿到了版本号但是更新前其他人已经将版本号升级了&#xff0c;那么当前事务…

Centos7 如何设置开机启动某个程序

以设置自动启动sentinel-dashboard作为案例 要在CentOS 7上设置开机启动一个Java程序&#xff0c;你可以按照以下步骤进行操作&#xff1a; 1. 进入应用程序的目录 cd /usr/localvim sentinel-dashboard.sh 2. 在sentinel-dashboard.sh 文件中 输入启动脚本 nohup java -D…

[MySQL]基础的增删改查

目录 1.前置介绍 2.数据库操作 2.1显示当前数据库 2.2创建数据库 2.3 使用数据库 2.4 删除数据库 3.常用数据类型 3.1整型和浮点型 3.2字符串类型 4.表的操作 4.1查看表结构 4.2创建表 4.3删除表 5.重点 5.1操作数据库 5.2常用数据类型 5.3操作表 1.前置介绍 …

Pycharm详细安装 配置教程

继上次安装完Anaconda之后&#xff0c;现在更新最新版本的pycharm的安装和使用教程~~~ Anaconda&#xff1a;是一个开源的Python发行版本&#xff0c;其中包含了conda、Python等180多个科学包及其依赖项。【Anaconda和Pycharm详细安装 配置教程_anconda安装时clear the packag…

GoZero微服务个人探究之路(七)添加中间件、自定义中间件

说在前面 官方已经自己实现了很多中间件&#xff0c;我们可以方便的直接使用&#xff0c;不用重复造轮子了 开启方式可以看官方文档 中间件 | go-zero Documentation 实现自定义的中间件 在业务逻辑中&#xff0c;我们需要实现自定义功能的中间件 ------这里我们以实现跨源…

RT-Thread 瑞萨 智能家居网络开发:RA6M3 HMI Board 以太网+GUI技术实践

不用放大了&#xff0c; 我在包里找到张不小的…… 以太网HMI线下培训-环境准备 这是社群的文档&#xff1a;【腾讯文档】以太网线下培训&#xff08;HMI-Board&#xff09; https://docs.qq.com/doc/DY0FIWFVuTEpORlNn 先介绍周六的培训是啥&#xff0c;然后再介绍一下要准…

ios适配虚拟home键

在H5开发过程中遇到一个兼容性问题。iphone手机的虚拟home键会对屏幕底部的内容造成遮挡。要处理此问题&#xff0c;需要清楚安全区域这个概念。 安全区域 根据刘海和虚拟Home键&#xff0c;Apple为其设备提供了屏幕安全区域的视觉规范 竖屏&#xff1a;竖屏的时候&#xff…