如何动态切换AG-Grid语言且避免闪烁问题?
如何动态切换AG-Grid语言且避免闪烁问题?
我之前也碰到过一模一样的问题,直接刷新整个网格那闪烁感真的很糟心,后来折腾了一阵,发现用AG-Grid自带的API就能完美解决,完全不用刷新整个网格:
- 首先,确保你已经提前引入了需要的所有AG-Grid语言包(比如西班牙语的
AG_GRID_LOCALE_ES、英语的AG_GRID_LOCALE_EN),不用每次切换时才去加载,提前备好就行。 - 不要用刷新整个组件或视图的方式,先拿到AG-Grid的实例是关键。你可以在组件里定义一个变量存网格API:
然后在网格的private gridApi: GridApi;onGridReady回调里把实例存下来:onGridReady(params: GridReadyEvent) { this.gridApi = params.api; } - 当应用语言切换时,直接调用AG-Grid的
setLocaleText方法更新语言,再轻量刷新下表头就好,整个过程不会重建网格,自然就没闪烁了:switchAppLanguage(newLang: string) { let targetLocale; if (newLang === 'es') { targetLocale = AG_GRID_LOCALE_ES; } else if (newLang === 'en') { targetLocale = AG_GRID_LOCALE_EN; } // **核心操作**:用API设置新的语言文本 this.gridApi.setLocaleText(targetLocale); // 轻量刷新表头,确保列头的筛选、排序等文本也同步更新 this.gridApi.refreshHeader(); } - 另外要注意,别再用那种重新渲染整个网格组件的方式了,比如ngIf切换或者视图刷新,这些都会导致DOM重建,必然出现闪烁。用上面的API方法,只会更新需要改变的文本节点,性能和体验都好太多。
内容来源于stack exchange
相关产品推荐
相关产品推荐

