为了账号安全,请及时绑定邮箱和手机立即绑定

【金秋打卡】第16天 实现Popup弹层组件结构

标签:
Typescript

课程章节: 第4章 4-1 组件框架搭建

课程讲师:西门老舅

课程内容:

今天学习的内容是实现 Popup组件的框架。

组件基本结构

根据前面的需求分析,弹层组件分为两部分:

  • 结构、功能:popup.ts
  • 样式:popup.css

在 src/components 目录下新建 Popup 目录,存放弹层组件的内容:

src/components
 |- Popup
   |- index.ts
   |- index.css

使用面向对象的思想来实现组件,使用一个函数对外暴露:

class Popup {

}

function popup() {
  return new Popup()
}
export default popup

这是一种单例设计模式。

实现功能

前面分析了弹层组件的配置参数:

  • width/height:弹层宽高,默认和父容器保持一致
  • title:弹层标题
  • content:弹层内容展示
  • position:弹层位置,默认水平垂直居中
  • mask:遮罩

使用 TypeScript 提供的接口来声明一个配置对象的类型:

interface IPopup {
  width?: string,
  height?: string,
  title?: string,
  position?: string,
  mask?: boolean,
  content?: () => void
}

在构造函数中处理配置对象,通过 Object.assign 方法来合并用户传入的配置和默认配置,这是一个常用技巧:

class Popup {
  constructor(private options: IPopup) {
    this.options = Object.assign({
      width: '100%',
      height:  '100%',
      title:  '',
      position:  'center%',
      mask: true,
      content: () => {}
    }, options)
  }
}

组件规范约束

一个项目中会有大大小小很多个组件。这些组件在编写时需要有一个统一的规范。

依旧是使用接口来定义一个组件的接口,来约束组件的编写。

interface IComponent {
  tempContainer: HTMLElement, // 组件挂载的容器
  init: () => void, // 初始化
  template: () => void, // 创建模板
  handle: () => void // 处理事件
}

类需要实现接口,使用 implements 关键字:

class Popup implements IComponent {
  tempContainer!: HTMLElement;
  constructor(private options: IPopup) {
      // .....
  }
  
  init() {
    this.template()
  }
  template() {
    this.tempContainer = document.createElement('div')
    this.tempContainer.innerHTML = `
      
    `
    document.body.appendChild(this.tempContainer)
  }
  handle() {}
}

function popup(options: IPopup) {
  return new Popup(options)
}
export default popup

课程收获

这节课学习了如何搭建组件的基本结构,通常会使用面向对象思想去封装组件,然后使用 TS 接口来对组件的构造参数类型和组件,进行一定的约束。
图片描述

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消