自定义在input生成tag标签样式,标签可删除。组件封装

 生成效果如图:

<template><div class="tag-input"><!-- 父盒子 --><div class="father_box" @click="fatherOnclick" :class="verify?'':'notVerify'"><!-- 生成的标签 --><div v-for="(item, index) in deepTagsAll" :key="index" class="has-created"><span class="tag-title">{{ item }}</span><a-icon type="close" class="i-close"  @click="removeTag(index, item)"/></div><!-- 输入框 --><inputplaceholder="输入后按<回车>创建"v-model="currentval"@keyup.enter="addTags"@keyup.delete="deleteTags"class="input-tag"ref="inputTag"type="text"/></div><div v-show="!verify" class="verify-text">{{verifyText}}</div></div>
</template><script>
export default {name: 'tagsInput',data () {return {// 输入框currentval: '',// 深拷贝tag// deepTagsAll: [],// 计算删除位置n: 0}},props: {// 标签tagstags: {type: Array,default: () => {return []}},// tag标签字符长度  默认99tagLength: {type: Number,default: 99},// 标签个数限制tagNumLimit: {type: Number,default: 99},// 是否直接去重  默认true自动去重,false不自动去重,页面提示repeat: {type: Boolean,default: true},// 标签正则校验tagReg: {type: String,default: ''},// 校验 form校验不通过 false时border为红色不通过  true:为默认色通过verify: {type: Boolean,default: true},// 校验不通过时文案提示verifyText: {type: String,default: '请输入'}},watch: {// 深度监听,避免父级组件接口返回数据过慢导致的页面组件数据不一致// tags: {//   handler (newValue) {//     console.log(newValue, 'newValue tags')//     this.deepTagsAll = newValue ? JSON.parse(JSON.stringify(newValue)) : JSON.parse(JSON.stringify([]))//   },//   deep: true // 深度监听// }},computed: {deepTagsAll: {get () {return this.tags},set (value) {// 在这里可以对 tags 值进行处理,例如去重、排序等this.$emit('update:tags', value)}}},mounted () {// this.deepTagsAll = JSON.parse(JSON.stringify(this.tags))},methods: {// 点击叉叉删除tagremoveTag (index, item) {this.deepTagsAll.splice(index, 1)},// 回车增加tagaddTags () {// 新增函数中可以加一些你所需要的校验规则。比如只能是数子,或者不能输入‘,’等if (!this.currentval.length) return// 限制标签个数if (this.deepTagsAll.length + 1 > this.tagNumLimit) {this.$message.warning('标签个数不能超过 ' + this.tagNumLimit + ' 个!')// 清空输入框this.currentval = ''return}// 限制输入长度if (this.currentval.length > this.tagLength) {this.$message.warning('单标签长度不能超过 ' + this.tagLength + ' 个字符!')return}// 根据父级参数实现页面是否自动去重// 标签自动去重if (this.repeat) {// 添加tagthis.deepTagsAll.push(this.currentval)this.deepTagsAll = Array.from(new Set(this.deepTagsAll))// 清空输入框this.currentval = ''} else {// 标签不需要自动去重 仅页面提示if (this.deepTagsAll.indexOf(this.currentval) > -1) {// 与已有标签重复 页面提示this.$message.warning('标签已存在')} else {// 与已有标签不重复 --> 添加tagthis.deepTagsAll.push(this.currentval)// 清空输入框this.currentval = ''}}},// 键盘删除键删除tagdeleteTags () {// 逻辑:当删除到最后一个字符的时候,删除后currentval为空,所以继续执行,n++。这时候n=1.然后判断n是否等于2,不等于不执行。// 这里是保证当你删除最后一个字符的时候不会执行删除tag的方法,当我们删完了字符后再按一次删除的时候,n就等于2了。就开始删除tag。// 当有多个tag时,我们连续删除,就会出现,因为currentval为空,所以一直执行n++,导致n不等于2了,所以没法删除后面的tag。// 所以增加判断,当n大于2的时候我们看tag的长度有没有,有那就继续删除,没有就归0,从来。if (this.currentval === '') {this.n++if (this.n === 2) {this.deepTagsAll.pop()}if (this.n > 2) {if (this.deepTagsAll.length) {this.deepTagsAll.pop()} else {this.n = 0}}} else {this.n = 0}},// 点击父盒子输入框获取焦点fatherOnclick () {this.$nextTick(() => {this.$refs.inputTag.focus()this.$emit('update:verify', true)})},// 标签数据传递给父组件sendTagsParams () {this.$emit('getCustomTag', this.deepTagsAll)}}
}
</script><style scoped lang="less">
/* 外层div */
.father_box {width: 100%;box-sizing: border-box;background-color: white;border: 1px solid #d9d9d9;border-radius: 4px;font-size: 12px;text-align: left;padding-left: 5px;word-wrap: break-word;overflow: hidden;display: flex;flex-wrap: wrap;
}
.notVerify {border: 1px solid #f5222d;
}
.verify-text {color: #f5222d;font-size: 12px;transform: scale(0.9);margin-top: -10px;margin-left: -15px;height: 12px;
}
/* 已生成的标签 box */
.has-created {display: inline-block;font-size: 14px;margin: 3px 4px 3px 0;padding-right:3px;background-color: #ecf5ff;border: 1px solid #e8eaec;border-radius: 3px;//box-shadow: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04);line-height: 24px;
}
/* 标签文字 */
.tag-title {height: 24px;line-height: 22px;max-width: 99%;position: relative;display: inline-block;padding-left: 8px;color: #409EFF;font-size: 14px;opacity: 1;vertical-align: middle;overflow: hidden;transition: 0.25s linear;
}
/* tag的叉叉 */
.i-close {padding:2px;opacity: 1;-webkit-filter: none;filter: none;color: #409EFF;cursor:pointer;vertical-align: middle;font-size: 10px;
}
/* 鼠标经过叉叉 */
.i-close:hover{background-color: #409EFF;border-radius: 50%;color: #fff;
}
/* input */
.input-tag {font-size: 16px;border: none;box-shadow: none;outline: none;background-color: transparent;padding: 0;flex-grow: 1;vertical-align: top;height: 30px;color: #495060;line-height: 32px;
}
/* 输入框提示文字大小 */
input:placeholder-shown {font-size: 0.6rem;
}</style>

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

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

相关文章

师从IEEE Fellow|民办高校计算机专业教师自费赴美访学

D老师科研背景较弱&#xff0c;拟自费访学并带孩子出国就读&#xff0c;故要求申请到美国生活成本低且有较好公立中学教育资源的地区&#xff0c;并希望对方不收管理费。最终我们落实了德克萨斯大学达拉斯分校的邀请函&#xff0c;对方是IEEE Fellow、IET Fellow和EAI Fellow三…

Redis中Hash类型的命令

目录 哈希类型的命令 hset hget hexists hdel hkeys hvals hgetall hmget hlen hsetnx hincrby hincrbyfloat 内部编码 Hash类型的应用场景 作为缓存 哈希类型和关系型数据库的两点不同之处 缓存方式对比 Redis自身已经是键值对的结构了,Redis自身的键值对就…

『CV学习笔记』图像超分辨率等图像处理任务中的评价指标PSNR(峰值信噪比)

图像超分辨率等图像处理任务中的评价指标PSNR(峰值信噪比) 文章目录 一. PSNR(峰值信噪比)1.1. 定义1.2. 作用1.3. 例子1.4 . PSNR评价标准二. 参考文献一. PSNR(峰值信噪比) 1.1. 定义 峰值信噪比(Peak Signal-to-Noise Ratio, PSNR)是图像超分辨率等图像处理任务中常用的一…

YOLO算法改进5【中阶改进篇】:添加SENet注意力机制

SE-Net 是 ImageNet 2017&#xff08;ImageNet 收官赛&#xff09;的冠军模型&#xff0c;是由WMW团队发布。具有复杂度低&#xff0c;参数少和计算量小的优点。且SENet 思路很简单&#xff0c;很容易扩展到已有网络结构如 Inception 和 ResNet 中。 我们可以看到&#xff0c;已…

纯CSS实现卡片上绘制透明圆孔

<template><div class"dot-card-wrapper"><div class"top-wrapper"><slot name"top"></slot></div><!-->核心是下面这部分</--><div class"dot-row"><div class"left-…

java配置GDAL

<gdal.version>3.7.0</gdal.version><!-- gdal--><dependency><groupId>org.gdal</groupId><artifactId>gdal</artifactId><version>${gdal.version}</version></dependency> GDAL环境安装 downlo…

学习 Python 数据可视化,如何快速入门?

Python 是一种非常流行的编程语言&#xff0c;具有简单易学、高效、丰富的库和工具等特点。其中&#xff0c;数据可视化是 Python 的一个重要应用领域&#xff0c;可以帮助人们更好地理解和分析数据。本文将介绍如何快速入门 Python 数据可视化&#xff0c;以及常用的可视化工具…

PHP进销存ERP系统源码

PHP进销存ERP系统源码 系统介绍&#xff1a; 扫描入库库存预警仓库管理商品管理供应商管理。 1、电脑端手机端&#xff0c;手机实时共享&#xff0c;手机端一目了然。 2、多商户Saas营销版 无限开商户&#xff0c;用户前端自行注册&#xff0c;后台管理员审核开通 3、管理…

HarmonyOS鸿蒙原生应用开发设计- 元服务(原子化服务)图标

HarmonyOS设计文档中&#xff0c;为大家提供了独特的元服务图标&#xff0c;开发者可以根据需要直接引用。 开发者直接使用官方提供的元服务图标内容&#xff0c;既可以符合HarmonyOS原生应用的开发上架运营规范&#xff0c;又可以防止使用别人的元服务图标侵权意外情况等&…

ROS学习笔记(4):ROS架构和通讯机制

前提 前4篇文章以及帮助大家快速入门ROS了&#xff0c;而从第5篇开始我们会更加注重知识积累。同时我强烈建议配合B站大学的视频一起服用。 1.ROS架构三层次&#xff1a; 1.基于Linux系统的OS层&#xff1b; 2.实现ROS核心通信机制以及众多机器人开发库的中间层&#xff1b…

提升ChatGPT答案质量和准确性的方法Prompt engineering

文章目录 怎么获得优质的答案设计一个优质prompt的步骤:Prompt公式:示例怎么获得优质的答案 影响模型回答精确度的因素 我们应该知道一个好的提示词,要具备一下要点: 清晰简洁,不要有歧义; 有明确的任务/问题,任务如果太复杂,需要拆分成子任务分步完成; 确保prompt中…

ElasticSearch集群环境搭建

1、准备三台服务器 这里准备三台服务器如下: IP地址主机名节点名192.168.225.65linux1node-1192.168.225.66linux2node-2192.168.225.67linux3node-3 2、准备elasticsearch安装环境 (1)编辑/etc/hosts&#xff08;三台服务器都执行&#xff09; vim /etc/hosts 添加如下内…

硬盘坏道检测修复工具下载,仅支持机械盘

硬盘坏道检测修复工具下载&#xff0c;仅支持机械盘 下载路径&#xff0c;最下方官网——软件下载——常用工具下载——硬盘坏道修复工具硬盘检测修复工具 【软件试用版下载、软件资讯或技术支持服务可点击文章最下方官网】

845. 八数码

文章目录 QuestionIdeasCode Question 在一个 33 的网格中&#xff0c;1∼8 这 8 个数字和一个 x 恰好不重不漏地分布在这 33 的网格中。 例如&#xff1a; 1 2 3 x 4 6 7 5 8 在游戏过程中&#xff0c;可以把 x 与其上、下、左、右四个方向之一的数字交换&#xff08;如果存…

orangepi zero2 全志H616 SSD1306 OLED屏幕测试程序 (已附源码)

orangepi zero2 H616 SSD1306 OLED屏幕测试程序 orangepi zero2 配置wiringpi 库后&#xff0c;突发奇想构建一个测试oled屏幕的程序&#xff0c;放一个蜗牛每次移动一个像素点&#xff0c;实时显示蜗牛的步数&#xff0c;后面要显示其他内容在此代码上修改即可&#xff0c;如…

NLP 模型中的偏差和公平性检测

一、说明 近年来&#xff0c;自然语言处理 &#xff08;NLP&#xff09; 模型广受欢迎&#xff0c;彻底改变了我们与文本数据交互和分析的方式。这些基于深度学习技术的模型在广泛的应用中表现出了卓越的能力&#xff0c;从聊天机器人和语言翻译到情感分析和文本生成。然而&…

谷歌推出基于AI的产品图像生成工具;[微软免费课程:12堂课入门生成式AI

&#x1f989; AI新闻 &#x1f680; 谷歌推出基于AI的产品图像生成工具&#xff0c;帮助商家提升广告创意能力 摘要&#xff1a;谷歌推出了一套基于AI的产品图像生成工具&#xff0c;使商家能够利用该工具免费创建新的产品图像。该工具可以帮助商家进行简单任务&#xff08;…

MySQL---搜索引擎

MySQL的存储引擎是什么 MySQL当中数据用各种不同的技术存储在文件中&#xff0c;每一种技术都使用不同的存储机制&#xff0c;索引技巧 锁定水平&#xff0c;以及最终提供的不同的功能和能力&#xff0c;这些就是我们说的存储引擎。 MySQL存储引擎的功能 1.MySQL将数据存储在文…

【leetcode】88. 合并两个有序数组(图解)

目录 1. 思路&#xff08;图解&#xff09;2. 代码 题目链接&#xff1a;leetcode 88. 合并两个有序数组 题目描述&#xff1a; 1. 思路&#xff08;图解&#xff09; 思路一&#xff1a;&#xff08;不满足题目要求&#xff09; 1. 创建一个大小为nums1和nums2长度之和的…

leetCode 494. 目标和 + 动态规划 + 记忆化搜索 + 递推 + 空间优化

关于本题我的往期文章&#xff1a; LeetCode 494.目标和 &#xff08;动态规划 性能优化&#xff09;二维数组 压缩成 一维数组_呵呵哒(&#xffe3;▽&#xffe3;)"的博客-CSDN博客https://heheda.blog.csdn.net/article/details/133253822 给你一个非负整数数组 nums…