frontend/docs/nice-modal.md
@ebay/nice-modal-react Vue 版本。
vue-nice-modal 是一个工具库,可以将 Vue.js 的 modal 组件转换为基于 Promise 的 API。
<!-- App.vue -->
<template>
<NiceModalProvider>
<router-view />
</NiceModalProvider>
</template>
<script setup>
import { NiceModal } from '@rpa/components'
const NiceModalProvider = NiceModal.Provider
</script>
<!-- my-modal.vue -->
<template>
<van-dialog
show-cancel-button
:value="modal.visible"
:close-on-click-overlay="false"
:title="title"
:message="content"
@closed="modal.remove"
@confirm="handleConfirm"
@cancel="handleCancel"
/>
</template>
<script setup>
import { NiceModal } from '@rpa/components'
const modal = NiceModal.useModal()
defineProps(['title', 'content'])
const handleCancel = () => {
modal.reject('cancel')
modal.hide()
}
const handleConfirm = () => {
modal.resolve('confirm')
modal.hide()
}
</script>
可与任何 UI 库配合使用,如 antdv
<!-- my-drawer.vue -->
<template>
<a-drawer v-bind="NiceModal.antdDrawer(modal)">xxx</a-drawer>
</template>
<!-- my-modal.vue -->
<a-modal v-bind="NiceModal.antdModal(modal)">xxx</a-modal>
最后使用 NiceModal.create 创建模态框高阶组件
// my-modal.js
import { NiceModal } from '@rpa/components'
import _MyModal from './my-modal.vue'
export const MyModal = NiceModal.create(_MyModal)
async function showModal() {
try {
const res = await NiceModal.show(MyModal, {
title: '标题',
content: '内容',
})
console.log('结果:', res)
}
catch (error) {
console.log('取消:', error)
}
}
可继承声明处上下文
<template>
<MyModal id="my-modal" />
</template>
<script setup>
const showModal = async () => {
try {
const res = await NiceModal.show('my-modal', {
title: '标题',
content: '内容',
})
console.log('结果:', res)
} catch (error) {
console.log('取消:', error)
}
}
</script>
const modal = NiceModal.useModal(MyModal)
async function showModal() {
try {
const res = await modal.show({
title: '标题',
content: '内容',
})
console.log('结果:', res)
}
catch (error) {
console.log('取消:', error)
}
}
// 预先注册模态框
NiceModal.register('register-modal', MyModal)
async function showModal() {
try {
const res = await NiceModal.show('register-modal', {
title: '标题',
content: '内容',
})
console.log('结果:', res)
}
catch (error) {
console.log('取消:', error)
}
}
NiceModal.Provider模态框容器组件,需要包裹在应用最外层。
NiceModal.create(Component)高阶组件,用于创建模态框组件。
show(modalId, args?)显示模态框,支持传入参数。
modalId: 模态框 ID 或组件args: 传递给模态框的参数hide(modalId)隐藏模态框。
modalId: 模态框 ID 或组件remove(modalId)从 DOM 中移除模态框。
modalId: 模态框 ID 或组件register(id, component, props?)注册模态框组件。
id: 模态框 IDcomponent: 模态框组件props: 默认 propsunregister(id)注销模态框组件。
id: 模态框 IDuseModal(modal?, args?)返回值:
id: 模态框 IDargs: 模态框参数visible: 可见状态show(args?): 显示模态框hide(): 隐藏模态框remove(): 移除模态框resolve(value): 解析模态框 Promisereject(reason): 拒绝模态框 PromiseresolveHide(value): 解析隐藏 Promise