自定义在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自身的键值对就…

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

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

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…

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;最下方官网——软件下载——常用工具下载——硬盘坏道修复工具硬盘检测修复工具 【软件试用版下载、软件资讯或技术支持服务可点击文章最下方官网】

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…

mysql:B+树/事务

B树 : 为了数据库量身定做的数据结构 我们当前这里的讨论都是围绕 mysql 的 innodb 这个存储引擎来讨论的 其他存储引擎可能会用到hash 作为索引,此时就只能应对这种精准匹配的情况了 要了解 B树 我们先了解 B树, B树 是 B树 的改进 B树 有时候会写作 B-树 (这里的" -…

axios 实现请求重试

前景提要&#xff1a; ts 简易封装 axios&#xff0c;统一 API 实现在 config 中配置开关拦截器 请求重试的核心是可以重放请求&#xff0c;具体实现就是在 axios 中&#xff0c;拿到当前请求的 config 对象&#xff0c;再用 axios 实例&#xff0c;就能重放请求。 在无感刷新…

【WinForm详细教程七】WinForm中的DataGridView控件

文章目录 1.主要属性DataSource行&#xff08;Row 相关属性&#xff09;列&#xff08;Column 相关属性&#xff09;单元格&#xff08;Cell 相关属性&#xff09;逻辑删除AllowUserToAddRowsAllowUserToDeleteRowsAllowUserToOrderColumns其他布局和行为属性 2.控件中的行、列…

PHP foreach 循环跳过本次循环

$a [[id>1],[id>2],[id>3],[id>4],[id>5],[id>6],[id>7],[id>18],];foreach($a as $v){if($v[id] 5){continue;}$b[] $v[id];}return show_data(,$b); 结果&#xff1a;

ASTM F963-23美国玩具安全新标准发布

新标准发布 2023年10月13日&#xff0c;美国材料与试验协会&#xff08;ASTM&#xff09;发布了新版玩具安全标准ASTM F963-23。 主要更新内容 与ASTM F963-17相比&#xff0c;此次更新包括&#xff1a;单独描述了基材重金属元素的豁免情况&#xff0c;更新了邻苯二甲酸酯的管控…