angular - 角度 - 如何检测浏览器在更改后完成重新渲染
问题描述
我有一个基于网格的表格,其中“订单”应用于每个项目以允许动态排序。
当触发网格顺序更改时,我想要一个事件告诉我浏览器已完成重新渲染整个网格。
我已经尝试过 ngAfterViewChecked,但是如果我有例如 1000 个网格项目,这似乎有点太早了。
我在这里有一个 stackblitz 演示。或者,也可以使用本机 javascript 解决方案。
https://stackblitz.com/edit/angular-ivy-yhfudq?file=src%2Fapp%2Ftable.directive.ts
更新
我发现了 2 个其他来源,它们更接近于检测何时发生更改,而不是当更改实际完成渲染时。如果您将浏览器 CPU 性能限制为 6 倍,则在您看到浏览器中的任何更改之前仍会记录事件。
这是更新的 Stackblitz。
https://stackblitz.com/edit/angular-ivy-bh5szc?file=src/app/table.directive.ts
解决方案
当您通过使用 直接应用所有更改时Renderer2
,所有更改都应该在从#applyOrder()
. 这是由浏览器同步完成的。
如果您希望在完成渲染时通知一个显式事件,您可以添加一个@Output()
声明。请参阅https://stackblitz.com/edit/angular-ivy-julues?file=src/app/table.directive.ts以供参考。
推荐阅读
- kubernetes - 无法在 EKS 中的 managedNodeGroups 上部署 pod
- c++ - 作为 const 引用返回的类的生命周期
- c++ - QVector 的 operator[] 返回不正确的值
- c# - Google Ads API 单客户端集成
- firebase - 参数类型'Future
' 不能分配给参数类型 'Widget' - xml - QML XmlListModel 递归(?)查询
- kubernetes - 如何将插件安装到谷歌安装的 grafana 点击部署容器
- ibm-cloud - IBM Cloud_deployment failure_Node RED
- python - 使用 Python 将字典保存和加载到 HDFS
- javascript - Laravel Livewire 发射不刷新组件数据