Naive UI 选择器 Select 的:render-label 怎么使用(Vue3 + TS)

news2024/11/18 16:20:29

项目场景:

在Naive UI 的 选择器 Select组件中 ,如何实现下面的效果 ,在下拉列表中,左边展示色块,右边展示文字。

Naive UI 的官网中提到过这个实现方法,有一个render-label的api,即: 选项标签渲染函数,
但是我个人感觉官网的写法比较晦涩难懂,下面我展示一下比较容易理解的写法

官网:[https://www.naiveui.com/zh-CN/os-theme/components/select#max-tag-count.vue]
例如:项目场景:示例:通过蓝牙芯片(HC-05)与手机 APP 通信,每隔 5s 传输一批传感器数据(不是很大)

解决方案:

1、vue代码

<template>

 <n-select class="flex-1" :to="false" clearable filterable v-model:value="rank" :options="ranks" 
 label-field="name" value-field="name" placeholder="等级选择" :render-label="renderLabel">
 </n-select>
 
</template>

2、js代码

import { NSelect, type SelectOption } from 'naive-ui';//引入模块

const rank = ref<string | null>()
const ranks = ref<any[]>([
		 {name: 'AA', color: '#2892C6'}{name: 'BB', color: '#8DB8A4'}{name: 'CC', color: '#D7E37D'}{name: 'DD', color: '#FCCF50'}
		 ])
/**
* renderLabel函数 
*/

//定义了一个名为 renderLabel 的常量函数,
//该函数接受一个类型为 SelectOption 的参数 option。
//SelectOption 类型应该是一个接口或类型别名,定义了选项对象的结构。
//函数返回一个 VNodeChild 类型的值,这是 Vue 中用来表示虚拟节点(VNode)的类型。
const renderLabel = (option: SelectOption): VNodeChild => {
//在函数内部,首先检查 option 对象的 type 属性是否等于字符串 'group'。如果是,那么函数会返回一个虚拟节点,该节点是一个 <span> 元素,其文本内容是 option.name 属性值后跟字符串 (Cool!)。
//这一步的目的是为了处理特定类型的选项,即当选项的类型是 'group' 时,执行特定的渲染逻辑。
    if (option.type === 'group') {
        return h('span', `${option.name}(Cool!)`);
    }
  // //这里就是我们创建的色块 用来显示色块的 ,你可以使用 h 函数来创建虚拟节点
  //如果 option 不是分组类型,函数会创建一个名为 colorBlock 的虚拟节点,这是一个 <span> 元素,
  //用于显示颜色块。h 函数是 Vue 提供的用于创建虚拟节点的函数。
  //这个 <span> 元素有一个类名 color-block 和一系列内联样式,包括背景颜色 backgroundColor,它是从 option.color 属性获取的。
    const colorBlock = h('span', {
        class: 'color-block',
        style: {
            backgroundColor: option.color,
            display: 'inline-block',
            width: '16px',
            height: '16px',
            lineHeight: '16px',
            marginRight: '8px',
            verticalAlign: 'middle'
        }
    });
    //这里就是我们创建的文本标签 用来显示文字的
    //接下来,创建一个名为 name 的虚拟节点,它也是一个 <span> 元素,用于显示选项的名称。这里使用类型断言 as string 来确保 option.name 是一个字符串类型,
    //这里as string 来确保 option.name 是一个字符串类型的原因主要是在某些情况下,即使变量实际上是字符串类型,TypeScript 编译器可能也无法推断出正确的类型。这可能是因为类型推断的逻辑不够复杂,无法处理特定的代码模式,其次是避免运行时错误 
    const name = h('span', option.name as string);
    // 返回包含颜色块和标签的数组
    return [colorBlock, name];
};


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Golang | Leetcode Golang题解之第442题数组中重复的数据

题目&#xff1a; 题解&#xff1a; func findDuplicates(nums []int) (ans []int) {for _, x : range nums {if x < 0 {x -x}if nums[x-1] > 0 {nums[x-1] - nums[x-1]} else {ans append(ans, x)}}return }

有通话质量更好的蓝牙耳机推荐吗?高品质的平价开放式耳机推荐

个人认为开放式耳机在通话方面还是表现不错的&#xff0c;主要有以下几个原因&#xff1a; 首先&#xff0c;在麦克风设计与配置方面&#xff1a; 拥有高品质麦克风硬件。优质的开放式耳机往往会配备高性能的麦克风&#xff0c;这些麦克风灵敏度较高&#xff0c;能够精准地捕捉…

1.2.1 HuggingFists安装说明-Linux安装

Linux版安装说明 下载地址 【GitHub】https://github.com/Datayoo/HuggingFists 【百度网盘】https://pan.baidu.com/s/12-qzxARjzRjYFvF8ddUJQQ?pwd2024 安装说明 环境要求 操作系统&#xff1a;CentOS7 硬件环境&#xff1a;至少4核8G&#xff0c;系统使用Containerd…

如何理解矩阵的复数特征值和特征向量?

实数特征值的直观含义非常好理解&#xff0c;它就是在对应的特征向量方向上的纯拉伸/压缩。 而复数特征值&#xff0c;我们可以把它放在复数域中理解。但是这里给出一个不那么简洁、但是更加直观的理解方式&#xff1a;把它放在实空间中。那么复数特征值表现的就是旋转等比放大…

Linux进程间的通信(三)IPC-信号通信和system-V消息队列

目录 信号通信 信号动作的改写 测试 信号的发送 消息队列 消息队列创建要用到的函数 send.c&#xff1a; recv.c 控制消息队列 信号通信 信号通信是一种在 Unix 和类 Unix 系统&#xff08;如 Linux&#xff09;中用于进程间异步通知的机制。信号是一种软件中断&#x…

数据库软题3-专门的集合运算

一、投影&#xff08;筛选列&#xff09; 题1 题2 二、选择(筛选行) 三、连接 3.自然连接 题1-自然连接的属性列数&#xff08;几元关系&#xff09;和元组数 解析&#xff1a; 题2-自然连接的属性列数&#xff08;几元关系&#xff09;和元组数 自然连接后的属性个数 A列…

SpringBoot3+Druid YAML配置

背景 Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池为监控而生&#xff0c;内置强大的监控功能&#xff0c;监控特性不影响性能。功能强大&#xff0c;能防SQL注入&#xff0c;内置Loging能诊断Hack应用行为。现在已经SpringBoot3&#xff0c;Druid的配置也需要随…

java基础(4)类和对象

目录 1.前言 2.正文 2.1类的定义与使用 2.1.1类的定义 2.1.2类的实例化 2.1.3this引用 2.1.3.1 访问当前对象的成员变量 2.1.3.2调用当前对象的成员方法 2.1.3.3构造函数中的 this 2.1.3.4归纳this 2.2封装 2.2.1封装的定义 2.2.2访问修饰符 2.3static 2.3.1sta…

靠谱的建站公司怎么找?2024高端定制开发建站公司推荐

和所有行业一样&#xff0c;网站建设行业内部现在处于一个鱼龙混杂的状态&#xff0c;大多数的网建企业所做的是与模板网站有关的业务&#xff0c;少部分企业专精于定制高端网站。在低端市场逐渐饱和后&#xff0c;无论什么企业都会有开始进行产品升级的需求&#xff0c;而高端…

刚面试完的前端面试题

今天晚上参加了一场长达40多分钟的技术面。我觉得面试官非常专业&#xff0c;问的问题也都是很棒的&#xff01;自己很多知识都需要学习。所以我决定回想并记录下来。回答不对的地方欢迎大家指正&#xff01; 我自己在小本本上回忆出来的大概就是26道题。后期我会持续更新我学习…

(undone) 阅读 MapReduce 论文笔记

参考&#xff1a;https://pdos.csail.mit.edu/6.824/papers/mapreduce.pdf 摘要&#xff1a;简单介绍了 MapReduce 是在大型分布式系统上工作的 Introduction 的内容总结&#xff1a; 1.介绍背景&#xff1a;为什么我们需要分布式系统&#xff1f;MapReduce 的意义是哪些 2.简…

2024icpc(Ⅱ)网络赛补题E

E. Escape 思路&#xff1a; 可以看成 Sneaker 和杀戮机器人都不能在原地停留&#xff0c;然后杀戮机器人有个活动范围限制。如果 Sneaker 和杀戮机器人可以在原地停留&#xff0c;那么 Sneaker 到达一个点肯定会尽可能早&#xff0c;而且时间必须比杀戮机器人到达这个点短。那…

从传统 RAG 到图 RAG,赋予大型语言模型更强大的知识力量

大型语言模型 (LLMs) 在固定数据集上进行训练&#xff0c;其知识在最后一次训练更新时就已固定。 ChatGPT 的常规用户可能已经注意到其众所周知的局限性&#xff1a;“训练数据截止到 2021 年 9 月”。 这种局限性会导致模型产生不准确或过时的响应&#xff0c;因为它们会“幻…

【计算机网络】初识Socket编程,揭秘Socket编程艺术--UDP篇

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;Linux从入门到进阶 欢迎大家点赞收藏评论&#x1f60a; 目录 Socket编程准备知识理解源IP地址和目的IP地址 认识端口号 网络字节序 socket编程socket编程接口socket系统调用bzero函数struct soc…

生信机器学习入门4 - 构建决策树(Decision Tree)和随机森林(Random Forest)分类器

机器学习文章回顾 生信机器学习入门1 - 数据预处理与线性回归&#xff08;Linear regression&#xff09;预测 生信机器学习入门2 - 机器学习基本概念 生信机器学习入门3 - Scikit-Learn训练机器学习分类感知器 生信机器学习入门4 - scikit-learn训练逻辑回归&#xff08;L…

【Android 14源码分析】Activity启动流程-2

忽然有一天&#xff0c;我想要做一件事&#xff1a;去代码中去验证那些曾经被“灌输”的理论。                                                                                  – 服装…

高并发内存池(六):补充内容

目录 有关大于256KB内存的申请和释放处理方法 处理大于256KB的内存申请 补充内容1 补充内容2 补充内容3 处理大于256KB的内存释放 新增内容1 新增内容2 测试函数 使用定长内存池替代new 释放对象时不传对象大小 补充内容1 补充内容2 补充内容3 补充内容4 测试…

Python(五)-函数

目录 函数的定义与调用 特点 语法格式 函数的参数 函数的返回值 函数嵌套调用 变量的作用域 局部变量 全局变量 函数的多种参数 位置参数 关键字参数 默认参数 可变参数 函数的定义与调用 python函数需要使用def关键字来定义,需要先定义,后调用 特点: 先定义…

课堂讨论:评价计算机性能的指标

**课堂讨论&#xff1a;评价计算机性能的指标** --- ### 课堂开始 **王老师**&#xff1a;同学们&#xff0c;今天我们来讨论如何评价计算机性能的指标。小明&#xff0c;你知道有哪些指标吗&#xff1f; **小明**&#xff1a;嗯...有吞吐率和响应时间吧&#xff1f;&#…

双链表的插入删除遍历

双链表的插入操作 双链表的删除操作 双链表的遍历操作