ui
ui copied to clipboard
【drawer】优化重构
历史 drawer
service
- service 打开的还是 DrawerComponent
component
- 会立即创建一个 overlay 出来,其实就是实例化,只是通过控制样式来达到显示隐藏
问题
component
- 未打开前不应该先实例化
service
- 打开会有两个 overlay 实例
- 关闭时会立即发出 close 事件并销毁 service 创建的 overlay,所以关闭动画就看不到了
现状
- 使用 service 时关闭会销毁;使用组件方式时,因为是跟随组件的生命周期,所以关闭并不会销毁实例
- 使用服务多次调用 open 会先销毁上一个再创建出一个新的,但对于组件方式因为 visible 没变,所以并没有任何的改变。
改进
目标
- 未打开前不应该先实例化
- service 方式不应该存在两个 overlay
- 关闭时应该有动效
设计
- service 是创建 drawer 的唯一实现,component 只是 service 的一个包装
- 原来 DrawerComponent 改成内置的抽屉组件,用来定义抽屉组件的渲染
- 关闭事件分为关闭前和完成关闭两个事件,动画完成后再发出完成关闭事件
- 新增 disposeWhenHide 配置,用来区分实现 现状1 里组件和服务的差异,并暴露给用户,使其具有选择权。
- open 返回值由 DrawerComponent 改成一个新的 DrawerRef,因为 DrawerComponent 已经是一个内置的渲染定义了,不适合作为对外暴露的对象,也不包含需要对外暴露的能力。
- 新增 updateOption 方法,用于直接更新抽屉内容,而不是销毁重建(实现的有问题,需要改一下)
变更的影响
- 之前组件是唯一的实现,服务是组件的又一层包装;现在改成由内置组件定义抽屉渲染,服务作为唯一的实现,组件只是服务的一个包装。
- 执行的先后顺序变了,配置的承载主体变了
验证点
添加单测,把下面完整的验证点都写一下