Tag标签 - 图1

代码演示

Tag标签 - 图2

基本用法

基本标签的用法,可以通过添加 closable 变为可关闭标签。可关闭标签具有 close 两个事件。

  1. <template>
  2. <div>
  3. <a-tag>Tag 1</a-tag>
  4. <a-tag><a href="https://github.com/vueComponent/ant-design">Link</a></a-tag>
  5. <a-tag closable @close="log">Tag 2</a-tag>
  6. <a-tag closable @close.prevent>Prevent Default</a-tag>
  7. </div>
  8. </template>
  9. <script lang="ts">
  10. import { defineComponent } from 'vue';
  11. export default defineComponent({
  12. setup() {
  13. const log = (e: MouseEvent) => {
  14. console.log(e);
  15. };
  16. return {
  17. log,
  18. };
  19. },
  20. });
  21. </script>

Presets:

Tag标签 - 图3

Custom:

Tag标签 - 图4

多彩标签

我们添加了多种预设色彩的标签样式,用作不同场景使用。如果预设值不能满足你的需求,可以设置为具体的色值。

  1. <template>
  2. <h4 style="margin-bottom: 16px">Presets:</h4>
  3. <div>
  4. <a-tag color="pink">pink</a-tag>
  5. <a-tag color="red">red</a-tag>
  6. <a-tag color="orange">orange</a-tag>
  7. <a-tag color="green">green</a-tag>
  8. <a-tag color="cyan">cyan</a-tag>
  9. <a-tag color="blue">blue</a-tag>
  10. <a-tag color="purple">purple</a-tag>
  11. </div>
  12. <h4 style="margin: '16px 0'">Custom:</h4>
  13. <div>
  14. <a-tag color="#f50">#f50</a-tag>
  15. <a-tag color="#2db7f5">#2db7f5</a-tag>
  16. <a-tag color="#87d068">#87d068</a-tag>
  17. <a-tag color="#108ee9">#108ee9</a-tag>
  18. </div>
  19. </template>

MoviesTag标签 - 图5
Toggle

控制关闭状态

通过 visible 属性控制关闭状态。

  1. <template>
  2. <a-tag v-model:visible="visible" closable>Movies</a-tag>
  3. <br />
  4. <a-button size="small" @click="visible = !visible">Toggle</a-button>
  5. </template>
  6. <script lang="ts">
  7. import { defineComponent, ref } from 'vue';
  8. export default defineComponent({
  9. setup() {
  10. return {
  11. visible: ref(false),
  12. };
  13. },
  14. });
  15. </script>

Tag标签 - 图6 TwitterTag标签 - 图7 Youtube Tag标签 - 图8 Facebook Tag标签 - 图9 LinkedIn

图标按钮

当需要在 Tag 内嵌入 Icon 时,可以设置 icon 属性,或者直接在 Tag 内使用 Icon 组件。 如果想控制 Icon 具体的位置,只能直接使用 Icon 组件,而非 icon 属性。

  1. <template>
  2. <a-tag color="#55acee">
  3. <template #icon>
  4. <twitter-outlined />
  5. </template>
  6. Twitter
  7. </a-tag>
  8. <a-tag color="#cd201f">
  9. <template #icon>
  10. <youtube-outlined />
  11. </template>
  12. Youtube
  13. </a-tag>
  14. <a-tag color="#3b5999">
  15. <template #icon>
  16. <facebook-outlined />
  17. </template>
  18. Facebook
  19. </a-tag>
  20. <a-tag color="#55acee">
  21. <template #icon>
  22. <linkedin-outlined />
  23. </template>
  24. LinkedIn
  25. </a-tag>
  26. </template>
  27. <script lang="ts">
  28. import { defineComponent } from 'vue';
  29. import {
  30. TwitterOutlined,
  31. YoutubeOutlined,
  32. FacebookOutlined,
  33. LinkedinOutlined,
  34. } from '@ant-design/icons-vue';
  35. export default defineComponent({
  36. components: {
  37. TwitterOutlined,
  38. YoutubeOutlined,
  39. FacebookOutlined,
  40. LinkedinOutlined,
  41. },
  42. });
  43. </script>

Tag标签 - 图10

可选择

可通过 CheckableTag 实现类似 Checkbox 的效果,点击切换选中效果。

该组件为完全受控组件,不支持非受控用法。

  1. <template>
  2. <div>
  3. <a-checkable-tag v-model:checked="checked1" @change="handleChange">Tag1</a-checkable-tag>
  4. <a-checkable-tag v-model:checked="checked2" @change="handleChange">Tag2</a-checkable-tag>
  5. <a-checkable-tag v-model:checked="checked3" @change="handleChange">Tag3</a-checkable-tag>
  6. </div>
  7. </template>
  8. <script lang="ts">
  9. import { defineComponent, ref } from 'vue';
  10. export default defineComponent({
  11. setup() {
  12. // or use watch
  13. const handleChange = (checked: boolean) => {
  14. console.log(checked);
  15. };
  16. return {
  17. handleChange,
  18. checked1: ref(false),
  19. checked2: ref(false),
  20. checked3: ref(false),
  21. };
  22. },
  23. });
  24. </script>

UnremovableTag 2Tag标签 - 图11Tag 3Tag 3Tag 3Tag 3…Tag标签 - 图12 Tag标签 - 图13 New Tag

动态添加和删除

用数组生成一组标签,可以动态添加和删除。

  1. <template>
  2. <template v-for="(tag, index) in tags" :key="index">
  3. <a-tooltip v-if="tag.length > 20" :title="tag">
  4. <a-tag :key="tag" :closable="index !== 0" @close="handleClose(tag)">
  5. {{ `${tag.slice(0, 20)}...` }}
  6. </a-tag>
  7. </a-tooltip>
  8. <a-tag v-else :closable="index !== 0" @close="handleClose(tag)">
  9. {{ tag }}
  10. </a-tag>
  11. </template>
  12. <a-input
  13. v-if="inputVisible"
  14. ref="inputRef"
  15. type="text"
  16. size="small"
  17. :style="{ width: '78px' }"
  18. v-model:value="inputValue"
  19. @blur="handleInputConfirm"
  20. @keyup.enter="handleInputConfirm"
  21. />
  22. <a-tag v-else @click="showInput" style="background: #fff; border-style: dashed">
  23. <plus-outlined />
  24. New Tag
  25. </a-tag>
  26. </template>
  27. <script lang="ts">
  28. import { defineComponent, ref, reactive, toRefs, nextTick } from 'vue';
  29. import { PlusOutlined } from '@ant-design/icons-vue';
  30. export default defineComponent({
  31. components: {
  32. PlusOutlined,
  33. },
  34. setup() {
  35. const inputRef = ref();
  36. const state = reactive({
  37. tags: ['Unremovable', 'Tag 2', 'Tag 3Tag 3Tag 3Tag 3Tag 3Tag 3Tag 3'],
  38. inputVisible: false,
  39. inputValue: '',
  40. });
  41. const handleClose = (removedTag: string) => {
  42. const tags = state.tags.filter(tag => tag !== removedTag);
  43. console.log(tags);
  44. state.tags = tags;
  45. };
  46. const showInput = () => {
  47. state.inputVisible = true;
  48. nextTick(() => {
  49. inputRef.value.focus();
  50. });
  51. };
  52. const handleInputConfirm = () => {
  53. const inputValue = state.inputValue;
  54. let tags = state.tags;
  55. if (inputValue && tags.indexOf(inputValue) === -1) {
  56. tags = [...tags, inputValue];
  57. }
  58. console.log(tags);
  59. Object.assign(state, {
  60. tags,
  61. inputVisible: false,
  62. inputValue: '',
  63. });
  64. };
  65. return {
  66. ...toRefs(state),
  67. handleClose,
  68. showInput,
  69. handleInputConfirm,
  70. inputRef,
  71. };
  72. },
  73. });
  74. </script>

Categories:MoviesBooksMusicSports

热门标签

选择你感兴趣的话题。

  1. <template>
  2. <span :style="{ marginRight: '8px' }">Categories:</span>
  3. <template v-for="tag in tags" :key="tag">
  4. <a-checkable-tag
  5. :checked="selectedTags.indexOf(tag) > -1"
  6. @change="checked => handleChange(tag, checked)"
  7. >
  8. {{ tag }}
  9. </a-checkable-tag>
  10. </template>
  11. </template>
  12. <script lang="ts">
  13. import { defineComponent, reactive, toRefs } from 'vue';
  14. export default defineComponent({
  15. setup() {
  16. const state = reactive({
  17. tags: ['Movies', 'Books', 'Music', 'Sports'],
  18. selectedTags: [] as string[],
  19. });
  20. const handleChange = (tag: string, checked: boolean) => {
  21. const { selectedTags } = state;
  22. const nextSelectedTags = checked
  23. ? [...selectedTags, tag]
  24. : selectedTags.filter(t => t !== tag);
  25. console.log('You are interested in: ', nextSelectedTags);
  26. state.selectedTags = nextSelectedTags;
  27. };
  28. return {
  29. ...toRefs(state),
  30. handleChange,
  31. };
  32. },
  33. });
  34. </script>

Tag标签 - 图14

Tag标签 - 图15

Tag标签 - 图16

Tag标签 - 图17

预设状态的标签

预设五种状态颜色,可以通过设置 colorsuccessprocessingerrordefaultwarning 来代表不同的状态。

  1. <template>
  2. <a-divider orientation="left">Without icon</a-divider>
  3. <div>
  4. <a-tag color="success">success</a-tag>
  5. <a-tag color="processing">processing</a-tag>
  6. <a-tag color="error">error</a-tag>
  7. <a-tag color="warning">warning</a-tag>
  8. <a-tag color="default">default</a-tag>
  9. </div>
  10. <a-divider orientation="left">With icon</a-divider>
  11. <div>
  12. <a-tag color="success">
  13. <template #icon>
  14. <check-circle-outlined />
  15. </template>
  16. success
  17. </a-tag>
  18. <a-tag color="processing">
  19. <template #icon>
  20. <sync-outlined :spin="true" />
  21. </template>
  22. processing
  23. </a-tag>
  24. <a-tag color="error">
  25. <template #icon>
  26. <close-circle-outlined />
  27. </template>
  28. error
  29. </a-tag>
  30. <a-tag color="warning">
  31. <template #icon>
  32. <exclamation-circle-outlined />
  33. </template>
  34. warning
  35. </a-tag>
  36. <a-tag color="default">
  37. <template #icon>
  38. <clock-circle-outlined />
  39. </template>
  40. waiting
  41. </a-tag>
  42. <a-tag color="default">
  43. <template #icon>
  44. <minus-circle-outlined />
  45. </template>
  46. stop
  47. </a-tag>
  48. </div>
  49. </template>
  50. <script lang="ts">
  51. import { defineComponent } from 'vue';
  52. import {
  53. CheckCircleOutlined,
  54. SyncOutlined,
  55. CloseCircleOutlined,
  56. ExclamationCircleOutlined,
  57. ClockCircleOutlined,
  58. MinusCircleOutlined,
  59. } from '@ant-design/icons-vue';
  60. export default defineComponent({
  61. components: {
  62. CheckCircleOutlined,
  63. SyncOutlined,
  64. CloseCircleOutlined,
  65. ExclamationCircleOutlined,
  66. ClockCircleOutlined,
  67. MinusCircleOutlined,
  68. },
  69. });
  70. </script>

API

Tag

参数说明类型默认值版本
closable标签是否可以关闭booleanfalse
closeIcon自定义关闭按钮VNode | #closeIcon-2.0.0
color标签色string-
icon设置图标VNode | #icon-2.0.0
visible(v-model)是否显示标签booleantrue

事件

事件名称说明回调参数
close关闭时的回调(e) => void

Tag.CheckableTag

参数说明类型默认值
checked(v-model)设置标签的选中状态booleanfalse

事件

事件名称说明回调参数
change点击标签时触发的回调(checked) => void