跳转到内容

弹出确认 popconfirm

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

示例

基础用法

点触发器就地问一句,确认与取消都收起浮层;展开时焦点先落在取消上

还没答复

放置位

placement 是首选位,位置不够时引擎自己避让,实际落点写在 data-placement 上

尺寸

size 换的是面板的内边距与最大宽度,三个档位落在 content 上

语气

在 content 上写 data-tone,确认按钮跟着换色;语气是共享的一层,不是本组件的 prop

受控与异步确认

传了 open 就由宿主说了算:确认先跑提交,跑完才写回收起

尚未提交

产物

自定义元素<xh-popconfirm>
Vue 组件XhPopconfirmCancelTrigger XhPopconfirmConfirmTrigger XhPopconfirmContent XhPopconfirmDescription XhPopconfirmPositioner XhPopconfirmRoot XhPopconfirmTitle XhPopconfirmTrigger
组合式函数usePopconfirm
状态机无,connect 直接由 props 算属性
皮肤@xihan-ui/styles/popconfirm.css

解剖

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

data-scope="popconfirm"root · trigger · positioner · content · title · description · confirm-trigger · cancel-trigger

Props

属性类型必填说明
closeOnEscapeboolean
closeOnInteractOutsideboolean
defaultOpenboolean
dirDirection文字方向,缺省 ltr。只改写浮层在行内轴上 start 与 end 的落点。
offsetnumber
onCancel() => void点了取消按钮,随后浮层收起。Escape 与层外交互只发 onOpenChange,不发这条。
onConfirm() => void点了确认按钮,随后浮层收起。
onOpenChange(details: PopoverOpenChangeDetails) => voidopen 变化意图;受控时是唯一出口,非受控时随内部转移一并通知。
openboolean
placementPlacement
sizeSize尺寸:sm / md / lg,决定面板的内边距档位。

connect API

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

成员类型说明
openboolean
setOpen(next: boolean) => void
confirm() => void发确认意图并请求收起。
cancel() => void发取消意图并请求收起。
getRootProps() => T['element']
getTriggerProps() => T['button']
getPositionerProps() => T['element']
getContentProps() => T['element']
getTitleProps() => T['element']
getDescriptionProps() => T['element']
getConfirmTriggerProps() => T['button']
getCancelTriggerProps() => T['button']

键盘

规格出处:W3C APG

按键生效条件行为
Enter / Spacefocus in trigger切换开合,展开时把焦点移入 content
Enter / Spacefocus in confirm-trigger发确认意图并收起浮层
Enter / Spacefocus in cancel-trigger发取消意图并收起浮层
Escapeopen收起浮层并把焦点还给 trigger;不发确认也不发取消

Released under The MIT License