最近写Angular项目用到@swimlane/ngx-datatable组件,其中table有一个recalculate()方法,可以重新计算网格大小。由于左侧边栏可以伸缩导致table没有重新计算,看了下ngx-datatable的实现源码,原来是这样的:
1 | /** |
2 | * Window resize handler to update sizes. |
3 | */ |
4 | @HostListener('window:resize') |
5 | @throttleable(5) |
6 | onWindowResize(): void { |
7 | this.recalculate(); |
8 | } |
只有触发window的resize事件才能重新计算,故想到一个方法:手动触发一个resize事件加入异步队列得以解决。
1 | // 1. 得到组件 |
2 | @ViewChild('datatable') datatable; |
3 | // 2. 触发方法 |
4 | const e = document.createEvent('Event'); |
5 | e.initEvent('resize', true, true); |
6 | window.dispatchEvent(e); |
7 | this.datatable.recalculate(); |