树形结构下拉框组件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 -->
    <treeselect
      v-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类名,用于使样式正确 -->
      <label
        slot="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",
        },
      ],
      // --------------------------------------属性配置------------------------------------------------------
      // 是否多选,默认false
      multiple: true,
      // 是否显示重置值的“×”按钮,默认true
      clearable: true,
      // 是否启用搜索功能。默认true
      searchable: true,
      // 是否禁用控制 (整体禁用)。默认false
      disabled: false,
      // 单击控件时是否自动打开菜单。默认true
      openOnClick: true,
      // 控件聚焦时是否自动打开菜单。 默认false
      openOnFocus: 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>





三、效果图

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智能驾驶新浪潮:SSD与UFS存储技术如何破浪前行?- SSD篇

随着汽车行业的不断发展&#xff0c;对存储的需求也在不断的变化中。早期阶段的汽车对存储的需求主要是收音机、播放器、导航仪等&#xff0c;有些还可以支持光盘和U盘的外接播放。中期阶段&#xff0c;也是当前主流的燃油车行车记录、多媒体、车联网的需求&#xff0c;对存储性…

【网站项目】基于ssm的青大校园预点餐系统

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

三层架构——工业控制领域简单理解

前言闲话 工业领域对好滴软件架构的需求不高&#xff0c;但不意味着可以用纯面向过程式编程解决问题&#xff0c;这样后期维护必将大乱。 曾经和一位从业30年的老电气工程师交流工业控制编程&#xff1a; 我问&#xff1a;为啥富士康这些大厂以前的机器都不联网&#xff1f;&…

自养买家号测评(补单)在亚马逊、lazada、速卖通等平台上需要注意什么?

在当今的电商环境中&#xff0c;许多卖家选择自己养号进行测评。然而&#xff0c;这种做法并非毫无风险。亚马逊、Lazada、eBay、Shopee、Wish、速卖通、沃尔玛、阿里国际、Mercari和Tik Tok等平台都存在封号的风险。特别是在每年的风险控制期内&#xff0c;新号被封的情况尤为…

Rectangle:圆角矩形、渐变矩形、随机颜色矩形

import QtQuickWindow {width: 640height: 480visible: truetitle: qsTr("Rectangle")//圆角Rectangle {id: rect1x: 120; y: 10width: 100; height: 200;border.color: "black"border.width: 3radius: 10}//渐变Rectangle {id: rect2x: 230; y: 10width: …

西门子WINCC常用C脚本1

1.置位&#xff0c;复位&#xff0c;取反 获取变量值&#xff1a;GetTagBit(可以是位也可以是字节&#xff0c;字&#xff0c;双字等具体字母不同) 设置变量值&#xff1a;SetTagBit 置位&#xff1a;SetTagBit&#xff08;"变量名",1&#xff09; 复位&#xff…

rbash环境变量提权

rbash为一个受限制的bash shell变体&#xff0c;限制用户在交互式环境中可使用的操作&#xff0c;以此提升系统安全性 可通过环境变量提权方式&#xff0c;越过此限制 export -p //查看环境变量 BASH_CMDS[a]/bin/sh;a //把/bin/sh给a /bin/bash export PATH$…

StackOverflow的架构

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 ​Stack Overflow 工程主管Roberta Arcoverde在最近接受 ​Scott Hanselman采访时透露了 Stack Overflow 架构的故事。他们每秒处理超过 6000 个请求&#xff0c…

如何利用在线网络靶场将安全提升至新水平

在 Standoff 365 的在线网络靶场中&#xff0c;任何公司都可以试验信息安全手段和企业网络设置&#xff0c;优化攻击检测、响应和事件调查的技能。 2023 年&#xff0c;我们不仅准许攻击者使用&#xff0c;也准许防御者使用。我们可以根据客户要求轻松部署 10 个细分行业中的任…

大创项目推荐 深度学习驾驶行为状态检测系统(疲劳 抽烟 喝水 玩手机) - opencv python

文章目录 1 前言1 课题背景2 相关技术2.1 Dlib人脸识别库2.2 疲劳检测算法2.3 YOLOV5算法 3 效果展示3.1 眨眼3.2 打哈欠3.3 使用手机检测3.4 抽烟检测3.5 喝水检测 4 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习的驾…

【不用找素材】ECS 游戏Demo制作教程(3) 1.17

一、生成墓碑 新建脚本如下&#xff1a; using Unity.Entities; using Unity.Mathematics;namespace ECSdemo {public struct GraveyardRandom : IComponentData{public Random Value;}}扩充GraveyardMono如下&#xff1a; using Unity.Entities; using Unity.Mathematics; …

代码随想录算法训练营day13|239.滑动窗口最大值、347.前K个高频元素

239. 滑动窗口最大值 347.前 K 个高频元素 239. 滑动窗口最大值 &#xff08;一刷至少需要理解思路&#xff09; 之前讲的都是栈的应用&#xff0c;这次该是队列的应用了。 本题算比较有难度的&#xff0c;需要自己去构造单调队列&#xff0c;建议先看视频来理解。 题目链接/文…

linux磁盘,分区,挂载等等

1. 修改磁盘分区的标签 例如&#xff1a;733be18b-7baf-d84c-879d-ca3db465f179太长了&#xff0c;修改一下。 linuxchenxiao:/media/linux/733be18b-7baf-d84c-879d-ca3db465f179$ 先 sudo blkid sudo blkid 找到你想修改的UUID(唯一标识符) /dev/sda1: UUID"733be…

C++_Lambda表达式的完整介绍

目录 1. 什么是Lambda表达式 1.1 四种表达式的含义 1.2 lambda表达式各个成员的解释 2. 捕获列表 3. 编译器如何看待Lambda表达式 参考文章 参考: C Lambda表达式的完整介绍 - 知乎 c在c11标准中引入了lambda表达式&#xff0c;一般用于定义匿名函数&#xff0c;使得代码…

ChatGPT正确打开方式与GPT-4.5的key最新获取方式

前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言4.5key价格泄漏ChatGPT4.0使用地址ChatGPT正确打开方式最新功能语音助手存档…

基于SpringBoot的乡村特产推广管理系统

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

根据基因名批量查找它的Uniprot编号

背景&#xff1a; 前几天老师交给我一个任务&#xff0c;给我一个基因列表&#xff0c;让我查找它们所编码的蛋白质的蛋白质序列。我上了一下uniprot数据库&#xff0c;发现这个任务可以分成两步&#xff1a; 找到这个基因在Uniprot数据库中所对应的蛋白质编码根据蛋白质编码…

SQL SERVER无法连接到服务器解决过程记录

很久没用sql server了&#xff0c;这几天打算更新SQL SERVER数据库&#xff1a;SQL看这一篇就看够了&#xff08;附详细代码及截图&#xff09; 这篇文章&#xff0c;发现连接不上服务器。 找一下解决办法。 一、打开服务界面 在键盘上按“WINR”快捷键&#xff0c;打开运行…

【51单片机Keil+Proteus8.9】温室盆栽灌溉系统

实验五 实验名称 温室盆栽灌溉系统 软件设计&#xff1a; 1. 定义对应的引脚和端口的别名。 2. 编写延时函数&#xff0c;用于控制程序的执行速度。 3. 编写LCD控制函数&#xff0c;包括发送命令和发送数据两种操作。 4. 编写显示函数&#xff0c;用于在LCD上显示字符串…

C# dataGridView 列的勾选框改变事件

dataGridView 增加一列 DataGridViewCheckBoxColumn 然后设置复选框值如下图&#xff1a; dataGridView增加两个事件 private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e){//提交改变&#xff0c;触发dataGridView1_CellValueChanged事件&…