跳转到内容

轻提示容器 toaster

反馈与浮层组件。三层同源:无头内核给出解剖与状态机,Vue 组件与自定义元素只是它的两层外壳,行为完全一致。

示例

基础用法

create 入队并返回 id,队列里的每条交给 XhToastRoot 渲染;退场窗口走完只收起不删,宿主在 status-change 里把它移出队列

队列:0 条

落位

placement 决定这一摞贴视口的哪个角,换的只是 group 上的 data-placement,队列本身不动

就地改写

同一个 id 再 create 一次是原地改写而不是新弹一条,位置不动;loading 不自动消失,换成 success 才开始倒计时

上限与清空

max 限制每个位置同时显示几条,超出挤掉最旧的;dismissAll 把队列直接倒掉,不走退场窗口

队列:0 条(上限 3)

手动收走

create 返回的就是队列身份 id,存下来随时 dismiss 掉那一条;dismiss 直接移出队列,不走退场窗口

队列:0 条 · 记下的 id:(无)

逐条落位

单条通知自带 placement 就盖掉 toaster 的默认落位;placements 交出眼下有条目的位置,照它渲染几摞就够

眼下有条目的位置:(无)

全局服务

createToastService 自带宿主与默认模板,模块作用域随处可调(请求拦截器、store);组件树内的组合用法见前几例

产物

自定义元素<xh-toaster>
Vue 组件XhToasterGroup XhToasterRoot
组合式函数useToaster
状态机toasterMachine
皮肤@xihan-ui/styles/toaster.css

解剖

部件名即 data-part 属性值,也是皮肤的选择器。加粗的是必备部件,不渲染它组件不工作(Web Components 适配器会在诊断通道上报 wc.missing-part)。

data-scope="toaster"root · group

Props

属性类型必填说明
toastsToastRecord[]受控队列:给了就由宿主说了算,内部写入只发 onToastsChange。
defaultToastsToastRecord[]
placementToastPlacement默认落位,默认 bottom-end。
maxnumber每个位置最多同时留几条,超出挤掉最旧的。不给即不限。
gapnumber同一摞内的间距(px),默认 16。
durationnumber单条没写 duration 时的默认停留毫秒。
removeDelaynumber单条没写 removeDelay 时的默认退场窗口毫秒。
pauseOnPageIdleboolean页面切到后台时暂停计时,逐条下发给 toast。
translationsPartial<ToasterTranslations>
onToastsChange(details: ToasterToastsChangeDetails) => void

状态机

状态idle

事件TOASTS.CREATE · TOASTS.UPDATE · TOASTS.DISMISS · TOASTS.DISMISS_ALL

connect API

useToaster 产出的对象。getXxxProps() 铺到对应部件的宿主元素上,其余是可读状态与操作入口。

成员类型说明
visibleToastsResolvedToast[]max 之内、按加入先后排列的可见条目,已补齐默认值。
placementsToastPlacement[]当前有条目的位置,按九宫格固定顺序。作者据此决定渲染哪几个 group。
countnumber
getToastsByPlacement(placement: ToastPlacement) => ResolvedToast[]
create(options?: ToastOptions) => string入队并返回 id;同 id 已存在则就地改写,位置不动。
update(id: string, options: Partial<ToastOptions>) => void
dismiss(id: string) => void
dismissAll() => void
getRootProps() => T['element']
getGroupProps(props?: ToasterGroupProps) => T['element']

键盘

规格出处:W3C APG

无键盘交互(不接收焦点,或焦点行为完全由原生元素提供)。

Released under The MIT License