javascript - Angular 2 OnPush 检测策略
问题描述
我在理解 Angular OnPush 检测策略方面遇到问题。当我执行一些异步操作时(例如从 TS 打开覆盖,因此不应导致使用 OnPush 策略检测组件上的更改),然后我单击任意位置或调用其他检测事件(不在我的组件中),它会更改(覆盖打开)。为什么会这样?我在一个页面上有太多这样的组件(当我有 15-20 个单位时性能变得非常糟糕),所以我需要禁用检测,我该怎么做?我尝试使用detach()方法,但我仍然需要在组件上发生简单事件后进行更改。
解决方案
这全面解释了 onPush:https ://netbasal.com/a-comprehensive-guide-to-angular-onpush-change-detection-strategy-5bac493074a4
当 an@Input
更改或触发事件时,它会触发。
ChangeDetectorRef 知道一些可能很有趣的方法
听起来您想手动分离和重新连接:
constructor(private cd: ChangeDetectorRef){}
public ngOnInit() {
this.cd.detach();
// do stuff
this.cd.reattach();
}
如果您分离并且从不重新连接,是的,不会在 UI 中反映任何更改。如果您需要执行繁重的任务并需要停止更改检测,您还必须重新启用它reattach()
尽管听起来您还想重新考虑组件结构,因为您想尽可能少地弄乱更改检测以避免 UI 错误。
推荐阅读
- django - 无法使用 Django RestApi 框架在 MongoDb 地图集中创建集合
- android-studio - 带有RelativeLayout的CardView在点击后没有正确更新
- graphql - graphql 是否支持证书锁定?
- java - JDatechooser 显示不正确的日期
- r - x 轴上的日期标签错位一个月
- android - xml文件如何存储在android中的共享首选项中
- angular - 需要将地图数据(youtube api 播放列表)与其他数据(播放列表的视频编号)合并
- pycharm - 我无法从 PyCharm 复制并粘贴到其他应用程序
- flutter - Flutter 保存多个用户的共享偏好
- python-3.x - python解码部分十六进制字符串