Skip to content

Mention 提及

用于在输入框或文本域中通过触发符号(@# 等)快速选择并插入提及内容,广泛应用于评论、私信、任务协作等场景。

基础用法

使用 v-model 绑定值,options 配置候选列表。在输入框内输入 @ 即可触发选项面板。

当前值:

基础用法

头像选项

options 中的每个选项添加 avatar 字段,即可在下拉面板中展示头像,配合 description 展示描述信息。

带头像的选项

分组选项

设置 group 字段即可将选项按组归类展示,相同 group 值的选项自动合并到同一分组。

分组选项

多触发符

通过 triggers 指定多个触发字符,如同时支持 @ 提人和 # 打标签。配合 search 事件动态切换选项源。

当前值:

多触发符

异步加载

监听 search 事件发起网络请求,通过 :loading="true" 显示加载状态,数据返回后更新 options

异步加载

文本域模式

设置 type="textarea" 即可在多行文本域中使用提及功能,支持所有提及特性。

文本域模式

自定义过滤

通过 filter-option 属性自定义过滤逻辑,例如支持拼音搜索。设为 false 则禁用过滤显示全部选项。

自定义过滤(拼音支持)

自定义选项渲染

通过 #option 插槽自定义选项显示内容,插槽参数包含 optionkeyword

自定义选项渲染

字数统计

配合 maxlengthshow-word-limit 属性,实时显示当前输入字数。

0 / 100
字数统计

禁用状态

设置 disabled 属性禁用组件,禁用状态下既不能输入也不会触发选项面板。

禁用状态

在 Nuxt 中使用

Mention 组件完全兼容 Nuxt 3/4,已在 SSR 环境中经过验证。初始值(modelValue)会在服务端直接渲染为静态文本,触发选项面板等交互在客户端激活后生效。

Nuxt 中使用

SSR 注意事项

  • modelValue 绑定的初始文本在服务端正确渲染
  • ✅ 禁用、只读状态在服务端即生效
  • ✅ 多尺寸、自定义 class 在服务端渲染正常
  • ⚠️ 下拉面板、触发选项等交互在客户端 Hydration 后生效
  • 💡 配合 Nuxt 的 <ClientOnly> 可按需将交互部分降级为纯客户端渲染

SSR 性能建议

在 SSR 场景下,Mention 的初始渲染只包含输入框本身,下拉面板不会被服务端渲染(v-show="false"),因此对首屏性能影响极小。

API

Props

属性名说明类型默认值
model-value / v-model绑定值string''
options候选选项列表MentionOption[][]
triggers触发字符(可多个)string[]['@']
type输入框类型'input' | 'textarea''input'
placement下拉框弹出方向'top' | 'bottom''bottom'
placeholder占位文本string
disabled是否禁用booleanfalse
readonly是否只读booleanfalse
size尺寸'large' | 'default' | 'small''default'
maxlength最大输入长度number
clearable是否可清空booleanfalse
show-word-limit是否显示字数统计booleanfalse
prefix-icon前缀图标Component
suffix-icon后缀图标Component
filter-option自定义过滤函数,设为 false 禁用过滤((keyword, option) => boolean) | false
loading是否显示加载状态booleanfalse
loading-text加载中文字string'加载中...'
no-data-text无数据文字string'暂无数据'
teleported是否挂载到 bodybooleantrue
popper-class下拉框自定义 classstring''
split选中后追加的分隔符string' '
whole-word是否以完整词写入booleanfalse
autofocus是否自动聚焦booleanfalse
rows文本域行数(textarea 有效)number3
debounce防抖延迟(ms)number100
validate-event是否触发表单校验booleantrue
theme-overrides主题覆盖变量ComponentThemeVars

MentionOption

字段说明类型
value唯一标识(必填)string
label显示标签string
disabled是否禁用boolean
avatar头像 URLstring
description描述信息string
group分组名称string

Events

事件名说明回调参数
update:modelValue值变化时触发(value: string) => void
input输入时触发(value: string) => void
change失焦时触发(value: string) => void
focus聚焦时触发(event: FocusEvent) => void
blur失焦时触发(event: FocusEvent) => void
clear清空时触发() => void
search触发搜索时触发(keyword: string, trigger: string) => void
select选中选项时触发(option: MentionOption, trigger: string) => void
open下拉框打开时触发() => void
close下拉框关闭时触发() => void
keydown键盘按下时触发(event: KeyboardEvent) => void

Slots

插槽名说明作用域参数
option自定义选项渲染{ option: MentionOption, keyword: string }
empty自定义无数据内容
loading自定义加载内容
prefix自定义前缀内容
suffix自定义后缀内容

Expose

属性/方法说明类型
ref输入框 DOM 元素HTMLInputElement | HTMLTextAreaElement
wrapperRef包裹元素 DOMHTMLElement
focus获取焦点() => void
blur失去焦点() => void
clear清空内容() => void
insertMention编程式插入提及(option: MentionOption, trigger?: string) => void

键盘操作

按键说明
/ 上下切换高亮选项
Enter选中当前高亮项
Tab选中当前高亮项(无高亮则关闭)
Escape关闭下拉面板

主题变量

变量名说明默认值
--yh-mention-font-size字体大小var(--yh-font-size-base)
--yh-mention-bg-color背景颜色var(--yh-fill-color-blank)
--yh-mention-border-color边框颜色var(--yh-border-color)
--yh-mention-border-radius圆角var(--yh-border-radius-base)
--yh-mention-height-default默认高度var(--yh-component-size-default)
--yh-mention-dropdown-shadow下拉阴影var(--yh-box-shadow-light)

Released under the MIT License.