# Tag 标签

用于标记和选择。

# 基础用法

提供几个固定的时间点供用户选择

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


额外的尺寸:mediumsmallmini,通过设置 size 属性来配置它们。


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

<template>
  <div>
    <div>
      <jp-tag>标签一</jp-tag>
      <jp-tag type="success">标签二</jp-tag>
      <jp-tag type="info">标签三</jp-tag>
      <jp-tag type="warning">标签四</jp-tag>
      <jp-tag type="danger">标签五</jp-tag>
    </div>
    <div style="margin-top: 20px">
      <jp-tag closable>默认标签</jp-tag>
      <jp-tag size="medium" closable>中等标签</jp-tag>
      <jp-tag size="small" closable>小型标签</jp-tag>
      <jp-tag size="mini" closable>超小标签</jp-tag>
    </div>
    <div style="margin-top: 20px">
      <jp-tag v-for="tag in tags" :key="tag.name" closable :type="tag.type">
        {{ tag.name }}
      </jp-tag>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      tags: [
        { name: '标签一', type: '' },
        { name: '标签二', type: 'success' },
        { name: '标签三', type: 'info' },
        { name: '标签四', type: 'warning' },
        { name: '标签五', type: 'danger' }
      ]
    }
  }
}
</script>
<style scoped>
.jp-tag {
  margin-left: 10px;
}
</style>
显示代码

# 动态编辑标签

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

<template>
  <div>
    <jp-tag :key="tag" v-for="tag in dynamicTags" closable :disable-transitions="false" @close="handleClose(tag)">
      {{ tag }}
    </jp-tag>
    <jp-input
      class="input-new-tag"
      v-if="inputVisible"
      v-model="inputValue"
      ref="saveTagInput"
      size="small"
      @keyup.enter.native="handleInputConfirm"
      @blur="handleInputConfirm"
    ></jp-input>
    <jp-button v-else class="button-new-tag" size="small" @click="showInput">+ New Tag</jp-button>
  </div>
</template>

<style scoped>
.jp-tag + .jp-tag {
  margin-left: 10px;
}
.button-new-tag {
  margin-left: 10px;
  height: 32px;
  line-height: 30px;
  padding-top: 0;
  padding-bottom: 0;
}
.input-new-tag {
  width: 90px;
  margin-left: 10px;
  vertical-align: bottom;
}
</style>

<script>
export default {
  data() {
    return {
      dynamicTags: ['标签一', '标签二', '标签三'],
      inputVisible: false,
      inputValue: ''
    }
  },
  methods: {
    handleClose(tag) {
      this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1)
    },

    showInput() {
      this.inputVisible = true
      this.$nextTick((_) => {
        this.$refs.saveTagInput.focus()
      })
    },

    handleInputConfirm() {
      let inputValue = this.inputValue
      if (inputValue) {
        this.dynamicTags.push(inputValue)
      }
      this.inputVisible = false
      this.inputValue = ''
    }
  }
}
</script>
显示代码

# 不同主题

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

Dark
Plain

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

<template>
  <div>
    <div class="tag-group">
      <span class="tag-group__title">Dark</span>
      <jp-tag v-for="item in items" :key="item.label" :type="item.type" effect="dark">
        {{ item.label }}
      </jp-tag>
    </div>
    <div class="tag-group">
      <span class="tag-group__title">Plain</span>
      <jp-tag v-for="item in items" :key="item.label" :type="item.type" effect="plain">
        {{ item.label }}
      </jp-tag>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { type: '', label: '标签一' },
        { type: 'success', label: '标签二' },
        { type: 'info', label: '标签三' },
        { type: 'danger', label: '标签四' },
        { type: 'warning', label: '标签五' }
      ]
    }
  }
}
</script>
<style scoped>
.tag-group {
  margin-top: 20px;
}
.jp-tag {
  margin-left: 12px;
}
</style>
显示代码

# Attributes

参数 说明 类型 可选值 默认值
type 类型 string success/info/warning/danger
closable 是否可关闭 boolean false
disable-transitions 是否禁用渐变动画 boolean false
hit 是否有边框描边 boolean false
color 背景色 string
size 尺寸 string medium / small / mini
effect 主题 string dark / light / plain light

# Events

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