Skip to content

InputTag 标签输入

用于录入多个短文本项,如标签、关键词、邮箱列表。

基础用法

Vue
TypeScript
Vue, TypeScript
vue
<template>
  <x-input-tag v-model="tags" placeholder="输入后回车" allow-clear />
</template>

<script setup lang="ts">
import { ref } from 'vue';

const tags = ref(['Vue', 'TypeScript']);
</script>

状态

禁用只读错误
vue
<template>
  <x-input-tag :default-value="['禁用']" disabled />
  <x-input-tag :default-value="['只读']" readonly />
  <x-input-tag :default-value="['错误']" error />
</template>

尺寸

mini
mini
mini
mini
vue
<template>
  <x-input-tag v-model="tags" size="mini" />
  <x-input-tag v-model="tags" size="small" />
  <x-input-tag v-model="tags" size="medium" />
  <x-input-tag v-model="tags" size="large" />
</template>

限制展示数量

one
two
+2...
vue
<template>
  <x-input-tag v-model="tags" :max-tag-count="2" allow-clear />
</template>

前缀和后缀

标签Vue
TypeScript
2
vue
<template>
  <x-input-tag v-model="tags" allow-clear>
    <template #prefix>标签</template>
    <template #suffix>{{ tags.length }}</template>
  </x-input-tag>
</template>

唯一值

Vue
Vue
vue
<template>
  <x-input-tag v-model="tags" unique-value placeholder="重复值不会再次创建" />
</template>

保留输入内容

draft
vue
<template>
  <x-input-tag
    v-model="tags"
    retain-input-value
    placeholder="创建或失焦后保留输入内容"
  />
</template>

对象标签

#设计
#研发
vue
<template>
  <x-input-tag
    v-model="tags"
    :field-names="fieldNames"
    :format-tag="formatTag"
    allow-clear
  />
</template>

<script setup lang="ts">
import { ref } from 'vue';

const tags = ref([
  { id: 'a', name: '设计' },
  { id: 'b', name: '研发' },
]);
const fieldNames = {
  value: 'id',
  label: 'name',
};
const formatTag = (data: any) => `#${data.name}`;
</script>

自定义标签

设计
研发
vue
<template>
  <x-input-tag v-model="tags" :field-names="fieldNames">
    <template #tag="{ data }">
      {{ data.name }}
    </template>
  </x-input-tag>
</template>

标签不换行

这是一段很长很长的标签内容,用于检查不换行时的显示效果
vue
<template>
  <x-input-tag v-model="tags" tag-nowrap />
</template>

事件回调

日志
等待操作
vue
<template>
  <x-input-tag
    v-model="tags"
    allow-clear
    @change="handleChange"
    @input-value-change="handleInputValueChange"
    @press-enter="handlePressEnter"
    @remove="handleRemove"
    @clear="handleClear"
  />
</template>

方法

Vue
TypeScript
vue
<template>
  <x-input-tag ref="inputTagRef" v-model="tags" />
  <x-button @click="inputTagRef?.focus()">聚焦</x-button>
  <x-button @click="inputTagRef?.blur()">失焦</x-button>
</template>

按需导入

ts
import { InputTag } from 'x-next';

Props

参数说明类型默认值
modelValue绑定值Array<string | number | TagData>-
defaultValue默认值,非受控模式Array<string | number | TagData>[]
inputValue输入框绑定值string-
defaultInputValue输入框默认值string''
placeholder占位提示string-
disabled是否禁用booleanfalse
error是否错误状态booleanfalse
readonly是否只读booleanfalse
allowClear是否允许清空booleanfalse
size输入框尺寸'mini' | 'small' | 'medium' | 'large'跟随全局配置
maxTagCount最多展示标签个数,0 不限制number0
retainInputValue创建或失焦后是否保留输入内容boolean | { create?: boolean; blur?: boolean }false
formatTag格式化标签内容(data: TagData) => string-
uniqueValue是否仅创建唯一值booleanfalse
fieldNames自定义 TagData 字段名object-
tagNowrap标签内容是否不换行booleanfalse

Events

事件名说明回调参数
update:modelValue值更新时触发value
update:inputValue输入值更新时触发inputValue
change标签值变化时触发value, event
input-value-change输入值变化时触发inputValue, event
press-enter按下回车时触发inputValue, event
remove删除标签时触发removed, event
clear点击清除按钮时触发event
focus获取焦点时触发event
blur失去焦点时触发event
keydown按下键盘时触发event

Slots

插槽名说明参数
prefix前缀内容-
suffix后缀内容-
tag自定义标签内容{ data }

Methods

方法说明
focus使输入框获取焦点
blur使输入框失去焦点