# 支持一键放大组件
# 背景
由于页面结构的一些限制,某些表格、树会挤在较小的空间里,导致操作不方便。
所以这里通过点击按钮,弹窗放大该组件的方式,解决这类问题。
# 使用
目前只支持ext组件放大。
使用很简单,调用useZoomInComponent
,传入弹窗标题、宽高以及需要放大的组件即可。
const { getZoomInIcon } = useZoomInComponent({
title : 'xxx',
width : 850,
height: 580,
extComponent: this,
});
然后在需要添加放大按钮的工具栏中,使用返回的getZoomInIcon
去生成按钮,按钮已集成了放大的逻辑。
tools:[
getZoomInIcon()
],
通过以上几行代码即可实现完整放大功能,且无需关心数据同步的问题。
# 效果
# 原理
# 数据同步
实现上,没有通过重新初始化去创建新组件,而是通过重新渲染的方式,只改变渲染位置,不改变数据,达到数据同步的效果。
# 放大流程
# 渲染
通过查看ext源码,重新render需要现将rendered置为false
然后调用vue的弹窗,在弹窗容器mounted时,将ext组件render到该容器
在弹窗关闭时,将ext组件再render回之前记录下的原始容器中
# 解决重复监听事件
表格组件在render后会监听点击、双击等事件,多次渲染就会被多次监听
所以在放大前,将该组件的mon函数置为空函数,渲染后再改回为原函数
# 解决行编辑渲染
行编辑组件,由于做了单例化,所以渲染时也许手动将其的rendered置为false
# 勾选框
勾选框同样在渲染时会重复监听事件,我们采用同样的策略,将其的init函数置为空函数,放大后再还原
# 总结
通过以上封装,几行代码即可实现指定组件的放大,且无需关心数据同步问题。