玩转 Vue 3 全家桶
大圣
前百度前端架构师
38321 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 44 讲
玩转 Vue 3 全家桶
15
15
1.0x
00:00/00:00
登录|注册

23 | 弹窗:如何设计一个弹窗组件?

使用数组管理弹窗实例
提供JavaScript调用的方法
渲染到body标签内部
支持传入其他组件的实现方式
重构代码
编写代码使测试通过
运行测试
写测试代码
组件渲染优化
动态创建和渲染Vue组件
使用Teleport渲染到页面顶层的body标签
控制组件数据传递
关闭按钮和回调函数
弹窗标题和内容
思考题
TDD实践
弹窗组件实现
弹窗组件需求分析
弹窗组件设计

该思维导图由 AI 生成,仅供参考

你好,我是大圣。
上一讲我们剖析了表单组件的实现模式,相信学完之后,你已经掌握了表单类型组件设计的细节,表单组件的主要功能就是在页面上获取用户的输入。
不过,用户在交互完成之后,还需要知道交互的结果状态,这就需要我们提供专门用来反馈操作状态的组件。这类组件根据反馈的级别不同,也分成了很多种类型,比如全屏灰色遮罩、居中显示的对话框 Dialog,在交互按钮侧面显示、用来做简单提示的 tooltip,以及右上角显示信息的通知组件 Notification 等,这类组件的交互体验你都可以在Element3 官网感受。
今天的代码也会用 Element3 的 Dialog 组件和 Notification 进行举例,在动手写代码实现之前,我们先从这个弹窗组件的需求开始说起。

组件需求分析

我们先来设计一下要做的组件,通过这部分内容,还可以帮你继续加深一下对单元测试 Jest 框架的使用熟练度。我建议你在设计一个新的组件的时候,也试试采用这种方式,先把组件所有的功能都罗列出来,分析清楚需求再具体实现,这样能够让你后面的工作事半功倍。
首先无论是对话框 Dialog,还是消息弹窗 Notification,它们都由一个弹窗的标题,以及具体的弹窗的内容组成的。我们希望弹窗有一个关闭的按钮,点击之后就可以关闭弹窗,弹窗关闭之后还可以设置回调函数。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了如何设计一个弹窗组件的过程,从组件需求分析、实现到测试全方位展示了弹窗组件的设计与实现过程。首先通过需求分析设计了包括标题、内容和关闭按钮的弹窗组件,并使用单元测试方法进行实现。其次,通过代码逻辑和测试代码的对比,展示了弹窗组件的具体实现过程,包括渲染样式、位置设置和关闭按钮功能等。最后,介绍了弹窗组件需要直接渲染在body标签下的特殊需求,并提供了使用Vue组件提供Javascript的动态渲染方法的示例。文章还提到了测试驱动开发(TDD)的方式来实现弹窗组件,强调了写测试代码的重要性。整体而言,本文详细介绍了弹窗组件的设计与实现过程,对于想要深入了解弹窗组件技术细节的读者具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《玩转 Vue 3 全家桶》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(16)

  • 最新
  • 精选
  • pzz
    这几节课直接垮了

    编辑回复: 有啥疑问可以留言讨论哦~

    2021-12-14
    3
    19
  • 关关君
    测试代码和实现代码有的地方都没对应上,代码有的也没帖全,我估计我们新手跟着这篇文章一个字一个字抄都运行不出来

    作者回复: 你好,这一讲主要是演示和剖析element3源码,后面会有ts手把手写一个mini弹窗的加餐的

    2021-12-15
    5
    9
  • 勤奋的樂
    看的脑壳疼,照着代码敲也运行不起来,而且github代码和课程代码还有不一样的地方。。。

    作者回复: 你好,这一讲主要是讲解element3的notification组件源码 , 代码可以在这里看到 https://github.com/hug-sun/element3/tree/master/packages/element3/src/components/Notification

    2021-12-23
    2
    3
  • link
    怎么又不上ts了

    作者回复: 后面的三个组件倾向于演示实际的组件要考虑的因素,就用的是element3的代码作为案例了

    2021-12-14
    1
  • 小毛
    git上有组件的完整源码么

    作者回复: 源码用的是element3作为演示代码,https://github.com/hug-sun/element3/blob/master/packages/element3/src/components/Notification/src/Notification.js

    2021-12-14
  • T1M
    最近4讲信息量都好大啊!头疼中……

    作者回复: 慢慢理解哈,不同类型的组件需要的知识点也不太一样

    2021-12-13
  • 周贺
    可能是我太菜了,无从下手~~
    2022-03-02
    1
    2
  • ll
    关于思考题: 文章中实现默认message是在options里,调用关系大致是 createNotification(options) --> createNotificationByOpts(options) --> createComponent(options), 这里的createComponent是默认调用的,结果就是产生一个Component,如果要实现思考题的效果,可以在creteNotificationByOpts里判断message 类型,如果message是 Vue.component 就直接挂载,不需要调用 createComponent,我猜是这么个过程。 然后我看了下element3中Notification的源码,发现,实现是在 createComponent(options) 函数中,就是判断了options.message 的类型,怎么判断的?isNode,如果是就 h(...,...,children),这里的children就是options.message就当children。如果类型是 string,就调用 h(...,...), 不传 children。
    2022-01-11
    1
  • 费城的二鹏
    思考题的实现方案,可以采用 slot 的方式吗?
    2021-12-13
    1
  • Geek_956996
    能不能出一个组件库的详细教程
    2023-11-08归属地:江西
收起评论
显示
设置
留言
16
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部