游乐游手机版
首页/前端开发/文章详情

TinyRobot智能建议弹出框组件使用方法

时间:2026-06-15 06:58
TinyRobotSuggestionPopover组件用于AI对话界面,通过弹出框集中呈现建议选项,支持点击或手动触发、分组数据、自定义列表项渲染,内置加载和空状态,并自动适配移动端,实现引导式交互与上下文帮助。

TinyRobot SuggestionPopover:智能建议弹出框组件

在 AI 驱动的对话界面中,用户真正需要的是一种更自然的交互引导方式。当 AI 助手准备提供一组可选建议时,一个恰到好处的弹出框既能承载足够的信息密度,又不会让操作变得繁琐。SuggestionPopover 正是为这种场景量身打造——点击触发器,浮层展开,建议列表清晰呈现,用户一眼即可锁定目标,一键完成选择。

TinyRobot SuggestionPopover智能建议弹出框组件

该组件的核心价值体现在以下几个方面:

  • 引导式交互:将建议项集中放置在弹出框中,界面整洁而不杂乱
  • 上下文帮助:在对话流程的适当时机提供选项,不打断对话上下文
  • 灵活的数据结构:既支持平铺列表,也支持分组列表,可根据需求自由选择
  • 丰富的自定义能力:触发器、列表项、头部、内容区……所需插槽一应俱全
  • 状态管理:内置 loading 和 empty 状态,无需额外处理
  • 移动端适配:窗口宽度小于 768px 时自动切换为移动端样式,省心省力

基本用法:带数据的弹出框

通过 data 属性传入建议数据,再用 trigger 插槽自定义触发器。点击按钮,弹出列表,操作直观便捷。


触发方式:click 与 manual

SuggestionPopover 提供两种触发方式,通过 trigger 属性配置:

  • 'click'(默认值):点击触发器时自动弹出或关闭,简单省心
  • 'manual':需要配合 show 属性(支持 v-model)手动控制显示与隐藏,适合需要精确控场的场景

说到 manual 模式,它的应用场景其实很典型——比如当 AI 回复完成后,需要按照业务逻辑自动弹出建议,这时手动控制就派上用场了。

分组建议数据

如果建议项数量较多且类别分明,分组数据格式能大幅提升浏览效率。在 data 数组中传入 SuggestionGroup 对象,用 group 字段标识分组,items 字段包含该分组下的建议项。这样展示出来,用户一目了然。


注意:分组数据和普通数据不可混用——data 数组中的项要么全是 SuggestionItem,要么全是 SuggestionGroup,二选一。

selectedGroup 支持 v-model,可以设置默认选中的分组,也能在用户切换时获取当前分组。groupShowMoreTrigger 属性控制分组“显示更多”的触发方式,支持 'click''hover',按需选用即可。

自定义列表项渲染

通过 item 插槽,每个建议项的渲染形式完全由你掌控。插槽参数为 { item },你可以在 SuggestionItem 中添加任意自定义字段,然后按自己的风格展示。


加载和空状态

SuggestionPopover 内置了 loading 和 empty 两种状态。通过 loading 属性显式开启加载状态;当 data 为空数组时,自动显示空状态。两个状态都提供了对应的插槽(loadingempty),你可以按需自定义展示效果。


Header 和 Body 插槽

除了 itemloadingempty,SuggestionPopover 还提供了 headerbody 插槽,用于完全接管弹出框的头部和内容区。下面是它的内部结构:

+---------------------------+
|     SuggestionPopover     |
|  +---------------------+  |
|  |       header        |  |
|  +---------------------+  |
|  |                     |  |
|  |        body         |  |
|  |   +-------------+   |  |
|  |   |   item[]    |   |  |
|  |   +-------------+   |  |
|  |                     |  |
|  |  loading / empty    |  |
|  +---------------------+  |
+---------------------------+
  • 使用 header 插槽时,会替换默认的标题区域
  • 使用 body 插槽时,会替换整个列表区域(包括 item 列表、loading 和 empty 状态)

移动端适配

SuggestionPopover 自带移动端适配逻辑。当视窗宽度小于 768px 时,弹出框会自动切换为移动端友好的展示样式——触控区域更大,布局更适合小屏幕。你基本无需额外处理,只需确保页面配置了正确的 viewport:

<meta name="viewport" content="width=device-width, initial-scale=1.0" />

API 参考

Props

属性类型必填默认值说明
dataSuggestionData-建议数据
titlestring-弹出框标题
iconVNode | Component-标题图标
showboolean-控制弹出框显示/隐藏,仅在 trigger 为 'manual' 时有效
trigger'click' | 'manual''click'触发方式:点击或手动控制
selectedGroupstring-当前选中分组,支持 v-model
groupShowMoreTrigger'click' | 'hover'-分组"显示更多"的触发方式
loadingbooleanfalse是否显示加载状态
topOffsetnumber-顶部偏移量

Slots

插槽名类型说明
trigger() => VNode | VNode[]自定义触发器
item({ item }: { item: SuggestionItem }) => VNode | VNode[]自定义渲染列表项
loading() => VNode | VNode[]自定义加载状态显示
empty() => VNode | VNode[]自定义空状态显示
header() => VNode | VNode[]自定义头部区域
body() => VNode | VNode[]自定义列表区域

Events

事件名参数说明
item-clickitem: SuggestionItem点击建议项时触发
group-clickgroup: SuggestionGroup点击分组时触发
open-弹窗打开时触发
close-弹窗关闭时触发
click-outsideevent: MouseEvent点击弹窗外部区域时触发

Types

interface SuggestionItem {
  id: string
  text: string
}interface SuggestionGroup {
  group: string
  label: string
  icon?: VNode | Component
  items: SuggestionItem[]
}type SuggestionData = (SuggestionItem | SuggestionGroup)[]

OpenTiny NEXT 是一套企业级智能前端开发解决方案,以生成式 UI 和 WebMCP 两大核心技术为基础,对现有的 TinyVue 组件库、TinyEngine 低代码引擎等产品进行智能化升级,构建出面向 Agent 应用的前端 NEXT-SDKs、AI Extension、TinyRobot 智能助手、GenUI 等新产品,加速企业应用的智能化改造,实现 AI 理解用户意图并自主完成任务。

来源:https://juejin.cn/post/7649977961551577138
上一篇TinyRobot AI对话组件库全组件使用教程 下一篇TinyRobot Container优雅构建AI对话容器
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
checked表单属性与CSS变量实现换肤原理
前端开发 · 2026-07-02

checked表单属性与CSS变量实现换肤原理

先聊一个有意思的现象:不需要编写任何 JavaScript,仅靠一个 :checked 伪类,就能驱动整个主题切换系统。听起来很神奇,但原理其实并不复杂——核心在于,:checked 是浏览器原生状态的实时镜像,而不是 JS 模拟出来的开关。 用户点击 ,或者用键盘空格键选中它,状态更新的那一刻,C

HTML meta标签页面定时跳转实现
前端开发 · 2026-07-02

HTML meta标签页面定时跳转实现

说到前端开发中最简洁的页面跳转方式,meta http-equiv= "refresh " 绝对算得上一个经典方案。不过别看它结构简单,格式上稍有疏忽,页面就可能原地卡死,或者直接跳到一个错误地址。下面把几个最容易踩坑的细节彻底讲清楚,帮你避开这些常见陷阱。 使用 http-equiv= "refresh

Cypress跨测试用例状态传递的不推荐但可选方案
前端开发 · 2026-07-02

Cypress跨测试用例状态传递的不推荐但可选方案

Cypress 默认的设计哲学很干脆:每个测试用例都必须是独立小王国,谁也不靠谁。这意味着 it() 执行前,浏览器上下文会被“一键还原”——页面状态、LocalStorage、Cookies 统统清空,强制维护测试隔离。这一规则让很多新手头疼:明明前一个测试已经创建了员工,后一个测试怎么就没法直接

全面深度解析HTML主体main标签唯一性原则与使用规范
前端开发 · 2026-07-02

全面深度解析HTML主体main标签唯一性原则与使用规范

在进行前端无障碍审计时,不少开发者会遇到一个奇怪的场景:浏览器不报错,但Lighthouse却直接标红“duplicate-main”。这其实是语义层与渲染层之间的根本差异。 为什么浏览器不报错但 Lighthouse 直接标红 duplicate-main 关键原因就在于:`main` 是语义锚点

HTML main标签在文档结构中的唯一性详解
前端开发 · 2026-07-02

HTML main标签在文档结构中的唯一性详解

先做一个快速检测:打开你最近开发的一个页面,按下 Ctrl+F 搜索 。如果搜索结果里出现2个以上,那这篇文章建议你认真读完。 本期要聊的主题,是HTML标签中一个看似简单、实际极易踩坑的核心知识点:main标签的唯一性。很多开发者知道这个标签的存在,但真正写到项目里,尤其是用了React、Vue这