角度2在没有必要时我们是否需要避免使用双向数据绑定?

时间:2016-09-13 01:06:32

标签: javascript angular data-binding angular2-forms

如果我在我的表单中使用双向数据绑定(ng-model)而不是单向数据绑定,我会进行大量搜索以了解是否存在一些不良性能。 我知道,对于每个双向数据绑定,角度为1,会创建一个新的手表,并且对于角度为1的巨大应用,我们可能会遇到性能问题,因为这样。现在我需要知道如果我只使用单向数据绑定,如果使用角度2这确实会有所不同吗? 在没有必要时,需要避免使用双向数据绑定吗?

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。说起来容易做起来难,但如果你能做到这一点,你会发现你会大大减少不必要的遍历。虽然遍历是超轻量级的,但是太多的东西都是坏事,我不喜欢给我的应用程序任何自治权。