•需求
点击后弹出
有遮罩层overlay
有 close按钮
有标题
有内容
有 yes / no 按钮

创建Dialog组件

内部的 button 可以之间引用我们自己做的 Button 组件

让 Dialog 支持 visible 属性

image.png

让 Dialog 支持自定义内容

自定义插槽 v-slot:title name=”title”
image.pngimage.png

把 Dialog 移到 body 下

防止 Dialog被遮挡
新组件:Teleport 传送门 ,可跳出当前环境

  1. <Teleport to="body"> </Teleport>

一句话打开 Dialog

如果不想声明 visible变量,然后改变它的值,可以用动态挂载组件
技术点:动态挂载组件

  1. import { createApp} from 'vue'
  2. createApp(Dialog).mount(div)
  3. import { createApp, h } from 'vue'
  4. createApp({render(){return h(Dialog)}}).mount(div)
  5. createApp({render(){return h(Dialog,{ visible: true })}}).mount(div)
  6. createApp({render(){return h(Dialog,{ visible: true },{ title, content })}}).mount(div)
  7. const app = createApp({render() {return h(Dialog,{visible: true,'onUpdate:visible':
  8. (newVisible) => {
  9. if (newVisible === false){ close()}}}}})
  10. app.mount(div)

createApp(Dialog).mount(div)
以上代码无法继续传参数,可以改为以下写法
createApp({render(){return h(Dialog)}}).mount(div)
image.png
createApp({render(){return h(Dialog,{ visible: true })}}).mount(div)
image.png
createApp({render(){return h(Dialog,{ visible: true },{ title, content })}}).mount(div)
image.png