对话框 xModal
在线预览
在线模拟尺寸:
介绍
可全局统一更改风格。
平台兼容
| Harmony | H5 | andriod | IOS | 小程序 | UTS | UNIAPP-X SDK | version |
|---|---|---|---|---|---|---|---|
| ☑ | ☑ | ☑️ | ☑️ | ☑️ | ☑️ | 4.76+ | 1.1.18 |
文件路径
ts
@/uni_modules/tmx-ui/components/x-modal/x-modal.uvue使用
ts
<x-modal></x-modal>Props 属性
| 名称 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| customStyle | 自定义遮罩样式 | string | "" |
| title | 标题 | string | "" |
| showFooter | 显示底部操作栏 | boolean | true |
| showTitle | 是否显示底部关闭按钮 | boolean | true |
| showClose | 是否显示底部关闭按钮 | boolean | false |
| showCancel | 显示取消按钮 | boolean | true |
| overlayClick | 遮罩是否允许点击被关闭 | boolean | true |
| show | 显示可v-model:show双向绑定 | boolean | false |
| duration | 动画时间 | number | 300 |
| watiDuration | 打开dom的延迟量,如果你打开 弹窗在ios正常。请不要修改此值。如果遇到打不开,或者 打开 后没动画,关闭不了等可能是sdk bug导致 此时需要加大值来避免。具体加多少以你弹窗内的节点复杂度有关,需要你自行压力测试。此值仅在ios下生效。 | number | 120 |
| cancelText | 取消按钮的文本 | string | "" |
| confirmText | 确认按钮的文本 | string | "" |
| round | 打开方向为上和下时的圆角空值时,取全局配置的圆角。 | string | "" |
| width | 宽,百分比,Px,rpx,auto都支持 | string | "84%" |
| height | 宽,百分比,Px,rpx,auto都支持 | string | "240px" |
| maxHeight | 可以是百分比,px,rpx单位数字。如果你不带单位,默认转换为rpx单位。 | string | "80%" |
| disabledScroll | 是否禁用内部的scroll标签禁用后内容不会滚动,如果设定了指定高,内容超出指定高,会被裁切但如果没有指定高,内容自动的话,高是自动的。有这个属性是因为截止4.03scroll-view里面放input不会上推键盘,及内部的view touchMove会失效。 | boolean | false |
| bgColor | 容器背景色 | string | "white" |
| darkBgColor | 暗黑时的容器背景色,不填写的话取sheetDarkColor | string | "" |
| zIndex | 层级 | string | "1105" |
| contentPadding | 内容区域的间隙 | string | "16" |
| btnColor | 底部按钮操作的主题色,空取全局 | string | "" |
| beforeClose | 关闭前异步执行的函数,如果返回false阻止关闭,返回true允许关闭必须返回的是Promise异步函数,且类型返回值必须是Promise<boolean>,不然会报错。 | callbackType | () : Promise<boolean> => {return Promise.resolve(true)} |
| closeColor | 关闭图标的颜色 | string | "#e6e6e6" |
| closeDarkColor | 关闭图标的暗黑颜色 | string | "#545454" |
Events 事件
| 名称 | 参数 | 说明 |
|---|---|---|
| click | - | 点击遮罩事件 |
| close | - | 关闭是触发 |
| open | - | 打开时触发 |
| beforeOpen | - | 打开前执行 |
| beforeClose | - | 关闭前执行 |
| update:show | - | 等同v-model:show |
| cancel | - | 取消时触发 |
| confirm | - | 确认时触发 |
Slots 插槽
| 名称 | 说明 | 数据 |
|---|---|---|
| trigger | 标签触发显示遮罩,免于使用变量控制 | - |
| title | 标题插槽 | - |
| default | 默认插槽 | - |
| footer | 底部操作栏 | - |
Ref 方法
| 名称 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| open | - | - | 打开 * |
| close | - | - | 关闭 * |
示例文件路径
json
/pages/fankui/modal示例源码
uvue
vue
<template>
<!-- #ifdef APP -->
<scroll-view style="flex:1">
<!-- #endif -->
<!-- #ifdef MP-WEIXIN -->
<page-meta :page-style="`background-color:${xThemeConfigBgColor}`">
<navigation-bar :background-color="xThemeConfigNavBgColor" :front-color="xThemeConfigNavFontColor"></navigation-bar>
</page-meta>
<!-- #endif -->
<x-sheet>
<x-text font-size="18" class=" text-weight-b mb-8">对话框 Modal</x-text>
<x-text color="#999999" >
精致美观的对话框,可全局配置风格
</x-text>
</x-sheet>
<x-sheet class="flex flex-row flex-row-center-center">
<x-modal content-padding="24px 24px" @confirm="onconfirm" style="width:48%;margin-right:2%" height="auto">
<template #trigger><x-button :block="true">自动内容高</x-button></template>
<x-input dark-bg-color="" placeholder="请输入密码"></x-input>
<x-input dark-bg-color="" class="my-12" placeholder="请输入密码"></x-input>
<view class="flex flex-row flex-row-center-between">
<x-text class="text-size-m text-grey">同意协议</x-text>
<x-switch ></x-switch>
</view>
</x-modal>
<x-modal style="width:48%" position="right" :show-close="true" :show-footer="false">
<template #trigger><x-button :block="true" color="warn">显示关闭</x-button></template>
<x-text color="#999999" >
精致美观的对话框,可全局配置风格
</x-text>
</x-modal>
</x-sheet>
<x-sheet>
<x-text font-size="18" class=" text-weight-b mb-8">默认高度,禁用遮罩关闭</x-text>
<x-text color="#999999" class="mb-32">
点击遮罩禁用关闭弹跳提示
</x-text>
<x-modal :overlayClick="false" confirmText="我已阅读" position="right">
<template #trigger><x-button :block="true" color="error">默认高度,禁用遮罩</x-button></template>
<x-text color="#999999" >
精致美观的对话框,可全局配置风格
精致美观的对话框,可全局配置风格
精致美观的对话框,可全局配置风格
精致美观的对话框,可全局配置风格
精致美观的对话框,可全局配置风格
精致美观的对话框,可全局配置风格
精致美观的对话框,可全局配置风格
精致美观的对话框,可全局配置风格
精致美观的对话框,可全局配置风格
精致美观的对话框,可全局配置风格
精致美观的对话框,可全局配置风格
精致美观的对话框,可全局配置风格
精致美观的对话框,可全局配置风格
精致美观的对话框,可全局配置风格
</x-text>
</x-modal>
</x-sheet>
<x-sheet>
<x-text font-size="18" class=" text-weight-b mb-16">嵌套</x-text>
<x-modal height="auto">
<template v-slot:trigger><x-button color="success" :block="true">打开嵌套</x-button></template>
<x-modal height="auto">
<template v-slot:trigger><x-button color="success" :block="true">打开嵌套1</x-button></template>
<x-text class="text-size-m text-grey line-8">当前弹层内容为自动高度</x-text>
<x-modal height="auto">
<template v-slot:trigger><x-button color="success" :block="true">打开嵌套2</x-button></template>
<x-text class="text-size-m text-grey line-8">当前弹层内容为自动高度</x-text>
</x-modal>
</x-modal>
</x-modal>
</x-sheet>
<x-sheet>
<x-text font-size="18" class=" text-weight-b mb-16">异步阻止关闭</x-text>
<x-modal :beforeClose="beforeClose" height="auto">
<template #trigger><x-button :block="true">打开异步关闭</x-button></template>
<x-text class="text-size-m text-grey line-8">只能关闭或者取消关闭或者点遮罩关闭,点确认按钮会异步阻止关闭。</x-text>
</x-modal>
</x-sheet>
<x-sheet>
<x-text font-size="18" class=" text-weight-b mb-16">底部插槽及变量控制显示</x-text>
<x-button @click="show = true" :block="true">打开</x-button>
<x-modal v-model:show="show" position="bottom" :show-footer="true">
<x-text color="#999999" >
精致美观的对话框,可全局配置风格
精致美观的对话框,可全局配置风格
精致美观的对话框,可全局配置风格
精致美观的对话框,可全局配置风格
精致美观的对话框,可全局配置风格
精致美观的对话框,可全局配置风格
精致美观的对话框,可全局配置风格
精致美观的对话框,可全局配置风格
精致美观的对话框,可全局配置风格
精致美观的对话框,可全局配置风格
精致美观的对话框,可全局配置风格
精致美观的对话框,可全局配置风格
精致美观的对话框,可全局配置风格
精致美观的对话框,可全局配置风格
</x-text>
<template #footer>
<x-button @click="show=false" :block="true" color="red" class="flex-1">定义底部插槽</x-button>
</template>
</x-modal>
</x-sheet>
<view style="height:50px"></view>
<!-- #ifdef APP -->
</scroll-view>
<!-- #endif -->
</template>
<script setup lang="ts">
import { ref } from 'vue'
const show = ref(false)
const show2 = ref(false)
const onconfirm = () => {
uni.navigateTo({
url:"/pages/fankui/overlay"
})
}
const beforeClose = ():Promise<boolean> => {
return new Promise(res=>{
setTimeout(function() {
res(false)
}, 2000);
})
}
</script>
<style lang="scss">
</style>