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