Skip to content

FxNotification 通知 ​

悬浮出现在页面角落(默认右上角),用于主动推送较重要的通知。不依赖任何 UI 框架,样式统一走 @fx/styles token,图标走 @fx-core/icon。

基础用法 ​

title 设置标题,message 设置内容(可为字符串 / VNode / 返回 VNode 的函数),duration 控制自动关闭时长(默认 4500ms,设 0 不自动关)。

不同类型 ​

fxNotification.primary / .success / .warning / .info / .error 快捷方法,自动带对应类型图标与配色。

出现位置 ​

position 控制:top-right(默认)/ top-left / bottom-right / bottom-left。

带偏移 ​

offset 控制距边缘的额外偏移(同一方位的多条会自动堆叠,间距 16px)。

不自动关闭 ​

duration 设为 0 时不自动关闭,需手动关闭。

隐藏关闭按钮 ​

showClose 设为 false 隐藏右上角关闭按钮。

使用 HTML 内容 ​

dangerouslyUseHTMLString 使 message 作为 HTML 渲染(注意 XSS 风险,message 内容应是可信的,切勿直接渲染用户输入)。

使用 VNode 内容 ​

message 可直接传 VNode,或传一个返回 VNode 的函数(含动态 props 时必须用函数形式)。

局部引入 ​

ts
import { fxNotification } from "@fx/components"

fxNotification(options)
fxNotification.primary(options)
fxNotification.success(options)
fxNotification.warning(options)
fxNotification.info(options)
fxNotification.error(options)

// 关闭所有
fxNotification.closeAll()

// 单个实例关闭
const handle = fxNotification({ message: "hi" })
handle.close()

API ​

Options ​

名称说明类型默认值
title标题string—
message内容string | VNode | (() => VNode)—
type类型'primary' | 'success' | 'info' | 'warning' | 'error'—
icon自定义图标名(被 type 覆盖)string(IconString,如 ep:bell)—
closeIcon自定义关闭图标名string(IconString)ep:close
duration自动关闭时长 ms(0 不自动关)number4500
position出现位置'top-right' | 'top-left' | 'bottom-right' | 'bottom-left'top-right
offset距边缘偏移number0
showClose是否显示关闭按钮booleantrue
dangerouslyUseHTMLStringmessage 是否作为 HTML 渲染booleanfalse
customClass自定义类名(追加到根节点)string—
customStyle自定义样式(合并到根节点 style)CSSProperties—
zIndex自定义层级(不传则自动递增)number—
onClick点击通知时的回调() => void—
onClose关闭时的回调(vm: VNode) => void—
appendTo挂载容器,传非法值回退到 document.bodystring | HTMLElementbody

fxNotification.success(...) 等快捷方法等同于 fxNotification({ ...options, type: 'success' }),也支持直接传字符串或 VNode 作为 message。

Slots ​

名称说明参数
default自定义内容区,覆盖 message—

Events ​

名称说明回调参数
destroy通知完全离场(动画结束后)触发,内部用于清理 DOM—

Methods ​

名称说明
fxNotification.closeAll()关闭所有方位的全部通知
fxNotification.updateOffsets(position?)重新计算指定方位(默认 top-right)的堆叠偏移
返回值.close()关闭单个通知(走完整离场动画生命周期)

Expose(组件实例) ​

名称说明
visible是否可见(Ref<boolean>)
close关闭当前通知

全局属性 ​

安装插件后可在模板中通过 $fxNotification / $fxNotify 调用。

实现说明 ​

  • 命令式挂载:fxNotification 通过 createVNode + render 在运行时创建实例并挂载到 appendTo 指定容器,不依赖任何全局组件注册。message 为函数时作为 children render prop(含动态 props 的 VNode 必须用此形式),为 VNode 时包一层返回函数,否则按字符串 / HTML 渲染。
  • 方位分桶堆叠:内部按 4 个方位各自维护实例队列,新实例的纵向偏移 = 已有实例高度累加 + 16px 间距;某条关闭时,其后方的实例自动回收高度并更新 offset,从而平滑上滑/下滑(top/bottom 过渡)。
  • 关闭生命周期:返回值的 close() 仅把内部 visible 置为 false,让 <transition> 走完整离场动画,@before-leave 时回收堆叠偏移、调用用户 onClose,@after-leave 触发 destroy 清理 DOM,避免内存泄漏。
  • 图标方案(fx):类型图标与关闭图标统一用 @fx-core/icon(FxIcon,图标名为 IconString,如 ep:success-filled),类型配色通过 --color-* token 注入;type 与 icon 同时存在时 type 优先。
  • 样式取值(fx):宽 / 内边距 / 圆角 / 阴影 / 边框 / 字号 / 字重等规格均与设计基准一致,圆角走 --radius-lg、阴影走 --shadow-popup、边框走 --color-border、字重走 --fw-bold,不引用任何第三方 UI 库 CSS 变量。
  • 层级管理(fx 增强):未传 zIndex 时自动从全局 nextZIndex() 取值并递增,避免多实例层级错乱。
  • 键盘交互:监听 delete / backspace 暂停计时,esc 关闭当前通知,其余按键恢复自动关闭计时。