angular 2 不需要时我们是否需要避免双向数据绑定?

Gus*_*avo 5 javascript data-binding angular2-forms angular

我搜索了很多东西以了解如果我在表单中始终使用双向数据绑定(ng-model)而不是单向数据绑定,是否会有一些糟糕的性能。我知道,对于每两种方式数据绑定的 angular 1 都会创建一个新手表,并且对于具有 angular 1 的大型应用程序,我们可能会遇到性能问题,因为这个。现在我需要知道如果我只使用一种方式数据绑定,使用 angular 2 是否会有一些不同?不需要时需要避免两种方式的数据绑定?

Gün*_*uer 5

Angular2 并没有真正的双向数据绑定。

Angular2 有

从父到子的数据绑定

[childProp]="parentProp"
Run Code Online (Sandbox Code Playgroud)

当更改检测检测到更改时,parentProp它会更新childProp并调用ngOnChanges()子组件(实施时)。

从孩子到父母的事件绑定

从孩子到父母的方式是事件绑定。

(childPropChange)="parentProp = $event"
Run Code Online (Sandbox Code Playgroud)

eventFromChild.emit(someValue)在子组件中调用时调用“someActionOnParent()” 。

两者的组合只是上面显示的数据和事件绑定的语法糖

[(childProp)]="parentProp"
Run Code Online (Sandbox Code Playgroud)

这意味着变化检测只需要检查parentProp变化,而不关心其他方向。从子组件到父组件的更新必须由子组件主动调用,并且不涉及更改检测。

这种单向数据流使得 Angular2 的变化检测非常高效。进一步优化ChangeDetectionStrategy.OnPush组件中的变更检测使用。这允许修剪 Angular2 必须实际进行更改检测的树。


小智 1

https://yakovfain.com/2015/12/29/two-way-data-binding-in-angular-2/

在某些情况下,双向数据绑定是最佳实践,但特别是当您需要实时双向 UI 更新和其他不常见情况时。除了摘要中的额外工作之外,问题还在于您将在不必要的时候触发树遍历,这最终会稍微减慢您的应用程序的速度,但是添加足够的树遍历,您就会看到性能影响。不要害怕使用它们。它们对运行时的影响很小,但为了最佳实践,请使用单向数据绑定,将更改检测策略设置为推送并自行手动处理可观察量。说起来容易做起来难,但如果你能做到这一点,你会发现你大大减少了不必要的遍历。尽管遍历是超轻量级的,但是太多的遍历是一件坏事,而且我不喜欢给我的应用程序任何自主权。