Dialog 模态对话框
vue
<template>
<ta-group title="基础用法">
<ta-cell
label="默认"
isLink
@click="
show({
title: '标题',
content: '提示内容提示内容提示内容提示内容提示内容提示内容'
})
"
></ta-cell>
<ta-cell
label="不带标题"
isLink
@click="
show({
content: '提示内容提示内容提示内容提示内容提示内容提示内容'
})
"
></ta-cell>
<ta-cell
label="不显示取消按钮"
isLink
@click="
show({
title: '标题',
content: '提示内容提示内容提示内容提示内容提示内容提示内容',
showCancel: false
})
"
></ta-cell>
<ta-cell
label="自定义按钮文案"
isLink
@click="
show({
title: '惊喜',
content: '这有一份关爱保险待你查收',
cancelText: '拒绝',
confirmText: '接受'
})
"
></ta-cell>
</ta-group>
<ta-group title="事件监听">
<ta-cell
label="confirm/cancel"
isLink
@click="
show(
{
title: '标题',
content: '提示内容提示内容提示内容提示内容提示内容提示内容'
},
true
)
"
></ta-cell>
<ta-cell
label="visible-state-change"
isLink
@click="
show(
{
title: '标题',
content: '提示内容提示内容提示内容提示内容提示内容提示内容'
},
false,
true
)
"
></ta-cell>
</ta-group>
<ta-group title="API">
<ta-cell label="showDialog" isLink @click="onCallApi()"></ta-cell>
</ta-group>
<ta-dialog
v-model:visible="visible"
v-bind="dialogArgs"
@confirm="onConfirm"
@cancel="onCancel"
@visibleStateChange="onVisibleStateChange"
>
</ta-dialog>
</template>
<script lang="ts">
import { defineComponent, ref, reactive } from 'vue'
import { showToast, showDialog, type PopupOnVisibleStateChange, type PopupOnCancel } from '@/index'
interface DialogArgs {
title?: string
content?: string
showCancel?: boolean
cancelText?: string
confirmText?: string
}
export default defineComponent({
name: 'ExpDialog',
setup() {
const visible = ref(false)
let callbackEvent = false
let visibleEvent = false
const dialogArgs = reactive<DialogArgs>({
title: '',
content: '',
cancelText: '',
confirmText: '',
showCancel: false
})
function show(obj: DialogArgs, callbackE?: boolean, visibleE?: boolean) {
obj = Object.assign(
{
title: '',
content: '',
showCancel: true,
cancelText: '取消',
confirmText: '确定'
},
obj
)
for (const k in obj) {
dialogArgs[k as 'title'] = obj[k as 'title']
}
callbackEvent = !!callbackE
visibleEvent = !!visibleE
visible.value = true
}
function onCallApi() {
showDialog({
title: '标题',
content: '提示内容提示内容提示内容提示内容提示内容提示内容',
maskClosable: true,
success: (res: any) => {
console.log('success', res)
showToast(res.confirm ? 'confirm = true' : 'cancel = true')
}
})
}
const onConfirm = (res: any) => {
console.log('confirm', res)
callbackEvent && showToast('点击确定按钮')
}
const onCancel: PopupOnCancel = res => {
console.log('cancel', res)
callbackEvent && showToast('点击取消按钮')
}
const onVisibleStateChange: PopupOnVisibleStateChange = ({ state }) => {
if (visibleEvent) {
console.log('visible-state-change', state)
showToast(`${state} 事件触发`)
}
}
return {
visible,
dialogArgs,
show,
onCallApi,
onConfirm,
onCancel,
onVisibleStateChange
}
}
})
</script>
Import
js
import { TaDialog } from 'tantalum-ui-mobile'
具体的引入方式可以参考引入组件。
Import Type
组件导出的类型定义:
ts
import type { VisibleState, PopupOnVisibleStateChange, PopupOnCancel } from 'tantalum-ui-mobile'
Props
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
v-model:visible | boolean | false | 否 | 是否显示 |
title | string | '提示' | 否 | 提示的标题 |
content | string | 否 | 提示的内容,优先于 slot | |
mask-closable | boolean | false | 否 | 点击蒙层是否触发关闭操作 |
show-cancel | boolean | true | 否 | 是否显示取消按钮 |
confirm-text | string | '确定' | 否 | 确认按钮的文字 |
cancel-text | string | '取消' | 否 | 取消按钮的文字 |
Events
事件 | 描述 | 回调函数参数 | 函数 TypeScript |
---|---|---|---|
confirm | 确认按钮点击时触发 | ||
cancel | 取消按钮点击时触发 | payload: { source: string } | PopupOnCancel |
visible-state-change | 展示隐藏时触发 | payload: { state: VisibleState } | PopupOnVisibleStateChange |
VisibleState 值说明
值 | 说明 | 备注 |
---|---|---|
show | 展示时触发 | |
shown | 展示且动画结束后触发 | |
hide | 隐藏时触发 | 可能携带其他参数 cancel, maskClick, closeClick 等 |
hidden | 隐藏且动画结束后触发 | 可能携带其他参数 cancel, maskClick, closeClick 等 |
Slots
#default
vue
<ta-dialog>提示内容</ta-dialog>
showDialog(object)
显示模态对话框。
object
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
title | string | 否 | 提示的标题 | |
content | string | 是 | 提示的内容 | |
maskClosable | boolean | false | 否 | 点击蒙层是否触发关闭操作 |
showCancel | boolean | true | 否 | 是否显示取消按钮 |
confirmText | string | '确定' | 否 | 确认按钮的文字 |
cancelText | string | '取消' | 否 | 取消按钮的文字 |
success | (payload: SuccessPayload) => void | 否 | 接口调用成功(在用户做出选择后,如取消,选择选项)的回调函数 | |
fail | (e: Error) => void | 否 | 接口调用失败(如传入错误的参数)的回调函数(不传入 fail 遇错误直接抛出) | |
complete | () => void | 否 | 弹窗关闭或调用失败的回调函数 |
SuccessPayload
属性 | 类型 | 说明 |
---|---|---|
confirm? | boolean | 为 true 时,表示用户点击了确定按钮 |
cancel? | boolean | 为 true 时,表示用户取消了 |
Usage
具体调用方式可以参考API 调用。
js
showDialog({
title: '提示',
content: '这是一个模态弹窗',
success(res) {
if (res.confirm) {
console.log('用户点击确定')
} else if (res.cancel) {
console.log('用户点击取消')
}
}
})