注册方法
created时在Vue的原型上添加了$modal,并且添加了open和clearModal方法,同时还在created中添加了beforeEach路由钩子用于清除弹窗
由于一个app中只能存在一个modal组件(组件会渲染多个弹窗)所以通过count字段去控制,在beforeCreate时判断count数值,并+1beforeDestroy时-1
方法实现
open
- 使用promise,便于外部调用处理确认和取消逻辑
- 提供了close和dismiss方法,并通过v-bind传入,这也是使用modal的组件都需要引用
modalmixin的原因,并且提供的close和dismiss方法都调用了closeModal方法,并且提供了更为彻底的afterClose方法,不过它并没有在modal的mixin中 - 提供了对背景水印的支持处理
- 向modalMap中添加了一个对象用于渲染modal,内部自己创建了key并且包含传入的组件和props,传入的options会作为
dialogPropscloseModal
将对应key的弹窗的visible设为falseclearModal
将对应key的弹窗数据从modalMap中移除,会销毁掉dom,并且会在弹窗clearModals
清除掉所有弹窗,这个放在在Vue原型上暴露,并在路由beforeEach调用
template
主要是 antd 组件
默认附带参数有
- vsible 控制是否展示
- afterClose 完全关闭后的回调,这里传入的是
clearModal方法 - destoryOnClose 关闭时销毁 Modal 里的子元素
- footer 当组件中有onlyClose时会在footer中展示一个关闭按钮,否则使用组件提供的按钮(通常是yqg-simple-form)提供
- width 宽度
- style overflowX: hidden;overflowY: auto;
- bodyStyle 有添加水印相关逻辑
- getContainer 指定 Modal 挂载的 HTML 节点,这里提供的是
this.$el就是调用的组件 HTML 节点 - 后续提供了自己添加参数的入口,可以是调用
open时的props,也可以在传入modal组件中的dialogPorps中指定 - cancel 传入了
dismiss用于关闭弹窗