等待弹层结果
需要从弹层拿回数据再继续时(成员多选、复杂表单提交结果等),用 confirm():打开并 await,确认路径 resolve,取消 / 关闭则 reject。
这不是 ElMessageBox.confirm 那种一句话确认框——内容仍是普通业务组件,只是调用方换成「等结果」而不是只 open。
日常「点确定就关、不必拿返回值」用 用事件关闭弹层 即可,不必碰 confirm / confirmed。
调用方:await confirm()
loading.value = true
try {
const { data } = await picker.$confirm({ modelValue: ids })
// 使用 data …
} catch {
// 取消、点遮罩关闭等:按业务处理即可
} finally {
loading.value = false // 按钮 :loading,等待期间更明显
}$confirm(props) 等价于 confirm({ props })。需要当次改容器等再用完整 confirm(config)。
通过
confirm()/$confirm()打开后,在resolve前不能再open/$open/confirm/$confirm:再open/$open会被忽略并告警,再confirm/$confirm会 rejectbusy。
内容侧:标出确认路径
confirm() 能 resolve,是因为关层时命中了某个带 confirmed: true 的关闭事件。closeOn 默认 confirmed: false,所以要用 confirm() 拿结果,须把「确定」标成确认路径:
defineLayer({
content: {
closeOn: {
confirm: { when: 'always', confirmed: true },
cancel: { when: 'always', confirmed: false },
},
},
})confirmed: true:关层时confirm()resolve,data为该事件的第一个参数confirmed: false(或数组糖):关层时 reject
若从未配置过
confirmed: true,则除手动close({ confirmed: true })外,其它关闭都会走向 reject。
手动 close 触发 resolve
正在 confirm() 等待时,调用方也可以主动 close 来 resolve / reject,不必经过内容 emit:
const pending = picker.$confirm({ modelValue: ids })
picker.close({ confirmed: true, args: [selected] })
// → pending resolve,data === selected
picker.close() // 或不传 confirmed: true → rejectresolve / reject 携带的数据
resolve 得到 LayerConfirmResult:
| 字段 | 说明 |
|---|---|
data | 等于 args[0];无参数时为 undefined |
args | 关闭时带上的参数列表(事件参数,或 close({ args })) |
event | 事件驱动关闭时的事件名;手动 close / unmount 无此字段 |
source | content | container | instance | unmount |
reject 时是 LayerConfirmError:code: 'close' 时 e.result 与上表同形;code: 'busy' 时没有 result。
报错处理
非确认路径关闭时(取消、点遮罩、普通 close() 等),confirm() 会 reject LayerConfirmError,code 为 'close':
import { LayerConfirmError } from 'vue-layerx'
try {
const { data } = await picker.$confirm({ modelValue: ids })
} catch (e) {
if (e instanceof LayerConfirmError) {
// e.code === 'close':按业务处理即可
}
}一种特殊情况:弹层已打开,或正在 confirm 时再调 confirm(),会 reject code: 'busy'(可用来提示「选择器已打开」等)。
Demo
同一 MemberPicker:页内勾选即时更新;弹层里勾选后 await confirm() 拿回选中成员。
下一步
运行时再定内容见 动态指定内容组件。clone、unmount、模块单例等见 实例的更多能力。错误码与成员表见 API:LayerInstance。