Tag 标签

用于标记和选择。

基础用法

type 属性来选择 tag 的类型。 也可以通过 color 属性来自定义背景色。

Tag 标签 - 图1

  1. <template>
  2. <el-tag>Tag 1</el-tag>
  3. <el-tag class="ml-2" type="success">Tag 2</el-tag>
  4. <el-tag class="ml-2" type="info">Tag 3</el-tag>
  5. <el-tag class="ml-2" type="warning">Tag 4</el-tag>
  6. <el-tag class="ml-2" type="danger">Tag 5</el-tag>
  7. </template>

可移除标签

设置 closable 属性可以定义一个标签是否可移除。 它接受一个 Boolean。 默认的标签移除时会附带渐变动画。 如果不想使用,可以设置 disable-transitions 属性,它接受一个 Booleantrue 为关闭。 当 Tag 被移除时会触发 close 事件。

Tag 标签 - 图2

  1. <template>
  2. <el-tag
  3. v-for="tag in tags"
  4. :key="tag.name"
  5. class="mx-1"
  6. closable
  7. :type="tag.type"
  8. >
  9. {{ tag.name }}
  10. </el-tag>
  11. </template>
  12. <script lang="ts" setup>
  13. import { ref } from 'vue'
  14. const tags = ref([
  15. { name: 'Tag 1', type: '' },
  16. { name: 'Tag 2', type: 'success' },
  17. { name: 'Tag 3', type: 'info' },
  18. { name: 'Tag 4', type: 'warning' },
  19. { name: 'Tag 5', type: 'danger' },
  20. ])
  21. </script>

动态编辑标签

动态编辑标签可以通过点击标签关闭按钮后触发的 close 事件来实现。

Tag 标签 - 图3

  1. <template>
  2. <el-tag
  3. v-for="tag in dynamicTags"
  4. :key="tag"
  5. class="mx-1"
  6. closable
  7. :disable-transitions="false"
  8. @close="handleClose(tag)"
  9. >
  10. {{ tag }}
  11. </el-tag>
  12. <el-input
  13. v-if="inputVisible"
  14. ref="InputRef"
  15. v-model="inputValue"
  16. class="ml-1 w-20"
  17. size="small"
  18. @keyup.enter="handleInputConfirm"
  19. @blur="handleInputConfirm"
  20. />
  21. <el-button v-else class="button-new-tag ml-1" size="small" @click="showInput">
  22. + New Tag
  23. </el-button>
  24. </template>
  25. <script lang="ts" setup>
  26. import { nextTick, ref } from 'vue'
  27. import { ElInput } from 'element-plus'
  28. const inputValue = ref('')
  29. const dynamicTags = ref(['Tag 1', 'Tag 2', 'Tag 3'])
  30. const inputVisible = ref(false)
  31. const InputRef = ref<InstanceType<typeof ElInput>>()
  32. const handleClose = (tag: string) => {
  33. dynamicTags.value.splice(dynamicTags.value.indexOf(tag), 1)
  34. }
  35. const showInput = () => {
  36. inputVisible.value = true
  37. nextTick(() => {
  38. InputRef.value!.input!.focus()
  39. })
  40. }
  41. const handleInputConfirm = () => {
  42. if (inputValue.value) {
  43. dynamicTags.value.push(inputValue.value)
  44. }
  45. inputVisible.value = false
  46. inputValue.value = ''
  47. }
  48. </script>

不同尺寸

Tag 组件提供除了默认值以外的三种尺寸,可以在不同场景下选择合适的按钮尺寸。

使用 size 属性来设置额外尺寸, 可选值包括 large, defaultsmall.

Tag 标签 - 图4

  1. <template>
  2. <el-row>
  3. <el-tag class="mx-1" size="large">Large</el-tag>
  4. <el-tag class="mx-1">Default</el-tag>
  5. <el-tag class="mx-1" size="small">Small</el-tag>
  6. </el-row>
  7. <el-row class="mt-4">
  8. <el-tag class="mx-1" size="large" closable>Large</el-tag>
  9. <el-tag class="mx-1" closable>Default</el-tag>
  10. <el-tag class="mx-1" size="small" closable>Small</el-tag>
  11. </el-row>
  12. </template>

主题

Tag 组件提供了三个不同的主题:darklightplain

通过设置 effect 属性来改变主题,默认为 light

Tag 标签 - 图5

  1. <template>
  2. <div class="tag-group my-2 flex flex-wrap gap-1 items-center">
  3. <span class="tag-group__title m-1 line-height-2">Dark</span>
  4. <el-tag
  5. v-for="item in items"
  6. :key="item.label"
  7. :type="item.type"
  8. class="mx-1"
  9. effect="dark"
  10. >
  11. {{ item.label }}
  12. </el-tag>
  13. <el-tag
  14. v-for="item in items"
  15. :key="item.label"
  16. :type="item.type"
  17. class="mx-1"
  18. effect="dark"
  19. closable
  20. >
  21. {{ item.label }}
  22. </el-tag>
  23. </div>
  24. <div class="tag-group my-2 flex flex-wrap gap-1 items-center">
  25. <span class="tag-group__title m-1">Light</span>
  26. <el-tag
  27. v-for="item in items"
  28. :key="item.label"
  29. class="mx-1"
  30. :type="item.type"
  31. effect="light"
  32. >
  33. {{ item.label }}
  34. </el-tag>
  35. <el-tag
  36. v-for="item in items"
  37. :key="item.label"
  38. class="mx-1"
  39. :type="item.type"
  40. effect="light"
  41. closable
  42. >
  43. {{ item.label }}
  44. </el-tag>
  45. </div>
  46. <div class="tag-group my-2 flex flex-wrap gap-1 items-center">
  47. <span class="tag-group__title m-1">Plain</span>
  48. <el-tag
  49. v-for="item in items"
  50. :key="item.label"
  51. class="mx-1"
  52. :type="item.type"
  53. effect="plain"
  54. >
  55. {{ item.label }}
  56. </el-tag>
  57. <el-tag
  58. v-for="item in items"
  59. :key="item.label"
  60. class="mx-1"
  61. :type="item.type"
  62. effect="plain"
  63. closable
  64. >
  65. {{ item.label }}
  66. </el-tag>
  67. </div>
  68. </template>
  69. <script lang="ts" setup>
  70. import { ref } from 'vue'
  71. import type { TagProps } from 'element-plus'
  72. type Item = { type: TagProps['type']; label: string }
  73. const items = ref<Array<Item>>([
  74. { type: '', label: 'Tag 1' },
  75. { type: 'success', label: 'Tag 2' },
  76. { type: 'info', label: 'Tag 3' },
  77. { type: 'danger', label: 'Tag 4' },
  78. { type: 'warning', label: 'Tag 5' },
  79. ])
  80. </script>

圆形标签 > 2.1.7

Tag 可以向按钮组件一样变为完全圆形。

Tag 标签 - 图6

  1. <template>
  2. <div class="flex flex-wrap gap-2 my-2">
  3. <el-tag
  4. v-for="item in items"
  5. :key="item.label"
  6. :type="item.type"
  7. class="mx-1"
  8. effect="dark"
  9. round
  10. >
  11. {{ item.label }}
  12. </el-tag>
  13. </div>
  14. <div class="flex flex-wrap gap-2">
  15. <el-tag
  16. v-for="item in items"
  17. :key="item.label"
  18. :type="item.type"
  19. class="mx-1"
  20. effect="light"
  21. round
  22. >
  23. {{ item.label }}
  24. </el-tag>
  25. </div>
  26. <div class="flex flex-wrap gap-2 my-2">
  27. <el-tag
  28. v-for="item in items"
  29. :key="item.label"
  30. :type="item.type"
  31. class="mx-1"
  32. effect="plain"
  33. round
  34. >
  35. {{ item.label }}
  36. </el-tag>
  37. </div>
  38. </template>
  39. <script lang="ts" setup>
  40. import { ref } from 'vue'
  41. import type { TagProps } from 'element-plus'
  42. type Item = { type: TagProps['type']; label: string }
  43. const items = ref<Array<Item>>([
  44. { type: '', label: 'Tag 1' },
  45. { type: 'success', label: 'Tag 2' },
  46. { type: 'info', label: 'Tag 3' },
  47. { type: 'danger', label: 'Tag 4' },
  48. { type: 'warning', label: 'Tag 5' },
  49. ])
  50. </script>

可选中的标签

有时候因为业务需求,我们可能会需要用到类似复选框的标签,但是按钮式的复选框的样式又不满足需求,此时我们就可以用到 check-tag组件。

check-tag 的基础使用方法,check-tag 提供的 API 非常简单。

Tag 标签 - 图7

  1. <template>
  2. <div>
  3. <el-check-tag checked style="margin-right: 8px">Checked</el-check-tag>
  4. <el-check-tag :checked="checked" @change="onChange">Toggle me</el-check-tag>
  5. </div>
  6. </template>
  7. <script lang="ts" setup>
  8. import { ref } from 'vue'
  9. const checked = ref(false)
  10. const onChange = (status: boolean) => {
  11. checked.value = status
  12. }
  13. </script>

Tag 属性

属性说明类型可选值默认值
type类型stringsuccess/info/warning/danger
closable是否可关闭booleanfalse
disable-transitions是否禁用渐变动画booleanfalse
hit是否有边框描边booleanfalse
color背景色string
size尺寸stringlarge / default /smalldefault
effect主题stringdark / light / plainlight
roundTag 是否为圆形booleanfalse

Tag 事件

事件名说明参数
click点击 Tag 时触发的事件
close关闭 Tag 时触发的事件

Tag 插槽

名称说明
自定义默认内容

CheckTag 属性

属性说明类型可选值默认值
checked是否选中booleantrue/false

CheckTag 事件

事件名说明参数
change点击 Check Tag 时触发的事件checked

CheckTag 插槽

名称说明
自定义默认内容

源代码

组件 Tag 标签 - 图8 文档 Tag 标签 - 图9

贡献者

Tag 标签 - 图10 云游君

Tag 标签 - 图11 三咲智子

Tag 标签 - 图12 JeremyWuuuuu

Tag 标签 - 图13 류한경

Tag 标签 - 图14 msidolphin

Tag 标签 - 图15 Delyan Haralanov

Tag 标签 - 图16 blackie

Tag 标签 - 图17 Aex

Tag 标签 - 图18 波比小金刚

Tag 标签 - 图19 btea

Tag 标签 - 图20 Alan Wang

Tag 标签 - 图21 on the field of hope

Tag 标签 - 图22 Hades-li

Tag 标签 - 图23 小孩可可爱爱

Tag 标签 - 图24 renovate[bot]

Tag 标签 - 图25 C.Y.Kun

Tag 标签 - 图26 qiang