Dol*_*lan 5 angular2-changedetection angular angular-changedetection
我应该始终ChangeDetectionStrategy.OnPush在组件中使用吗?
我总是听到OnPush它绝对令人惊讶,并解决了许多问题,加快了Angular应用的速度,甚至摆脱了NgZone。但是,如果是这样,为什么默认情况下不生成它ng g component?
如果真是太神奇了,那我们应该一直使用它吗?
Rit*_*esh 10
为什么它不是默认生成的 ng g 组件?
这是开发人员需要做出的设计决策。ChangeDetectionStartegy.OnPush 适用于不可变对象。如果您不使用不可变对象,您将很难找出您的组件出了什么问题。既然 angular 团队不会强迫您使用不可变对象,为什么他们会使用这种策略生成组件。
您可以在此处阅读有关 ChangeDetection 的更多信息:https ://blog.angularindepth.com/everything-you-need-to-know-about-change-detection-in-angular-8006c51d206f
OnPush 旨在与具有@Input()装饰器的组件一起使用。简单来说,从父组件获取输入的组件。由于更改检测是一项昂贵的操作,您可以将此类组件配置为仅在其输入属性更改时运行更改检测。
一个很好的例子OnPush()是加载器组件。
如果您特别是在处理非常大的项目,OnPush建议使用该策略来减少更改检测过程,因为这是一项非常昂贵的操作。
在需要时启动检测的方法有很多种,也许最常用的是changeDetection()从ChangeDetectorRef.
如果你有一个继承的项目并且你想使用这个OnPush策略,建议是从叶子组件开始应用它,检查一切是否仍然有效,然后跟随祖先并一次上一级到根。最终,整体性能将受益。
如果你想让你的新生成的组件自动OnPush添加策略,你只需要在你angular.json的schematics节点中添加选项,例如:
...
"schematics": {
"@schematics/angular:component": {
"changeDetection": "OnPush",
"prefix": "app",
"styleext": "scss"
},
"@schematics/angular:directive": {
"prefix": "app"
}
}
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
517 次 |
| 最近记录: |