强大的 Vue 标签输入组件:基于 Element Plus 的 ElTagInput 详解

标签输入框组件 (ElTagInput)

一个功能强大的标签输入组件,基于 Element Plus 开发,支持多种交互模式和自定义配置。

组件链接 demo示例链接

功能特点

  • 🏷️ 支持添加、删除和管理多个标签
  • 🔢 可限制最大显示标签数量,超出部分折叠显示
  • 🎨 自定义标签样式(类型、效果、大小)
  • 🛑 支持禁用、只读和错误状态
  • 🔄 双向绑定 (v-model) 支持
  • ✨ 连续输入模式(输入后自动保持焦点)
  • 🧹 一键清空功能
  • 📝 保留输入值选项
  • 📊 完整的事件系统

安装与使用

基本用法

vue 复制代码
<template>
  <el-tag-input v-model="tags" />
</template>

<script setup>
import { ref } from 'vue'
const tags = ref(['标签1', '标签2', '标签3'])
</script>

属性

属性名 说明 类型 默认值
v-model / modelValue 绑定的标签数组 Array \[\]
max-tag-count 最大展示标签数量(0表示不限制) Number 0
tag-type 标签类型(同 Element Tag 的 type) String ''
tag-effect 标签效果(light/dark/plain) String 'light'
tag-size 标签尺寸(large/default/small) String 'default'
tag-height 自定义标签高度(像素) Number 32
tag-width 自定义标签宽度(像素) Number 0
disabled 是否禁用 Boolean false
readonly 是否只读 Boolean false
error 是否错误状态 Boolean false
placeholder 输入框占位文本 String '添加标签'
allow-clear 是否显示清空按钮 Boolean false
retain-input-value 输入确认后是否保留输入值 Boolean false
input-debounce 输入事件防抖时间(毫秒) Number 300

事件

事件名 说明 回调参数
update:modelValue 标签数组更新时触发 (tags: string\[\])
change 标签数组变化时触发 (tags: string\[\])
input-value-change 输入值变化时触发(防抖) (value: string, event: Event)
press-enter 按下回车确认输入时触发 { value: string, tags: string\[\] }
remove 删除标签时触发 { value: string, index: number, tags: string\[\] }
clear 清空所有标签时触发 { oldTags: string\[\], tags: string\[\] }
focus 输入框获取焦点时触发 (value: string, event: Event)
blur 输入框失去焦点时触发 (value: string, event: Event)

方法

通过 ref 调用组件方法:

vue 复制代码
<template>
  <el-tag-input ref="tagInputRef" />
  <button @click="addTag">添加标签</button>
</template>

<script setup>
import { ref } from 'vue'
const tagInputRef = ref(null)

const addTag = () => {
  tagInputRef.value?.addTag('新标签')
}
</script>

可用方法

方法名 说明 参数 返回值
addTag 添加标签 (tag: string) boolean
clearTags 清空所有标签 - string\[\] (原标签)
getTags 获取当前标签 - string\[\]
setTags 设置标签 (tags: string\[\]) string\[\]
removeTagByIndex 按索引移除标签 (index: number) string/null
getInputValue 获取当前输入值 - string
setInputValue 设置输入值 (value: string) string
focus 聚焦输入框 - boolean
blur 失焦输入框 - boolean

示例

高级配置

vue 复制代码
<el-tag-input
  v-model="tags"
  :max-tag-count="3"
  tag-type="success"
  tag-effect="dark"
  :tag-height="40"
  allow-clear
/>

事件监听

vue 复制代码
<el-tag-input
  v-model="tags"
  @press-enter="handleEnter"
  @remove="handleRemove"
  @clear="handleClear"
/>

<script setup>
const handleEnter = ({ value, tags }) => {
  console.log('添加标签:', value, '当前标签:', tags)
}
const handleRemove = ({ value, index, tags }) => {
  console.log('移除标签:', value, '位置:', index, '剩余标签:', tags)
}
const handleClear = ({ oldTags }) => {
  console.log('清空标签,原标签:', oldTags)
}
</script>

连续输入模式

vue 复制代码
<el-tag-input v-model="tags" />
<!-- 输入标签后按回车,输入框会自动保持焦点 -->

样式定制

组件支持通过 CSS 变量和样式覆盖进行自定义:

css 复制代码
.el-tag-input {
  --tag-height: 36px; /* 自定义标签高度 */
}

注意事项

  • max-tag-count0 时表示不限制显示标签数量
  • 连续输入模式下,按 ESC 或点击外部可退出输入状态
  • 在禁用或只读状态下无法添加/删除标签

示例截图

相关推荐
程序员黑豆10 小时前
Java包装类:基本类型与对象的桥梁
java·前端·ai编程
bugcome_com13 小时前
JWT 知识小课堂:从入门到精通,一文吃透 JSON Web Token
前端·json
To_OC13 小时前
写了三天 Next.js,我的 React 世界观被拆了又装回去
前端·全栈·next.js
独泪了无痕13 小时前
viewer.js 安装与配置指南:实现图片预览功能
前端·vue.js
Fluxart.ai15 小时前
电商商品图审核怎么自动化?规则引擎、人工复核与发布门禁
java·前端·自动化
why技术16 小时前
AI 写的文章,可能都带着手敲一遍都去不掉的“隐形水印”。
前端·人工智能·后端
愚公搬代码16 小时前
【愚公系列】《Android应用案例开发大全》016-LBS类应用掌上杭州(辅助工具类的开发)
android·前端
CodeSheep16 小时前
又一个华为天才少年,离职了!
前端·后端·程序员
kyriewen16 小时前
面试官说"打开你的AI工具"——我才发现,他考的根本不是写代码
前端·人工智能·面试
IT_陈寒17 小时前
Vue的双向绑定把我坑惨了,原来这个场景不能用
前端·人工智能·后端