如果我在我的表单中使用双向数据绑定(ng-model)而不是单向数据绑定,我会进行大量搜索以了解是否存在一些不良性能。 我知道,对于每个双向数据绑定,角度为1,会创建一个新的手表,并且对于角度为1的巨大应用,我们可能会遇到性能问题,因为这样。现在我需要知道如果我只使用单向数据绑定,如果使用角度2这确实会有所不同吗? 在没有必要时,需要避免使用双向数据绑定吗?
答案 0 :(得分:2)
Angular2确实没有双向数据绑定。
Angular2有
从父级到子级的数据绑定
[childProp]="parentProp"
当更改检测检测到parentProp
中的更改时,它会更新childProp
并在子组件中调用ngOnChanges()
(实施时)。
和从子级到父级的事件绑定
从子级到父级的方式是事件绑定。
(childPropChange)="parentProp = $event"
调用" someActionOnParent()"在子组件中调用eventFromChild.emit(someValue)
时。
这两个的组合只是上面显示的数据和事件绑定的语法糖
[(childProp)]="parentProp"
这意味着更改检测只需要检查parentProp
是否要更改,并且不关心其他方向。从子级到父级的更新必须由子组件主动调用,并且不涉及更改检测。
这种单向数据流使Angular2的变化检测非常有效。要进一步优化更改检测,请在组件中使用ChangeDetectionStrategy.OnPush
。这允许修剪Angular2必须实际进行更改检测的树。
答案 1 :(得分:1)
https://yakovfain.com/2015/12/29/two-way-data-binding-in-angular-2/
有些情况下双向数据绑定是最佳实践,但特别是当您需要实时双向UI更新和其他不常见的事件时。除了digest的额外工作之外的问题是,你将在不必要的时候触发树遍历,它最终会使你的应用程序略微减慢,但添加足够的应用程序,你会看到性能影响。不要害怕使用它们。它们在运行时的影响很小,但为了最佳实践,请使用单向数据绑定,将changedetectionstrategy设置为push并自行手动处理observable。说起来容易做起来难,但如果你能做到这一点,你会发现你会大大减少不必要的遍历。虽然遍历是超轻量级的,但是太多的东西都是坏事,我不喜欢给我的应用程序任何自治权。