gpt4 book ai didi

angular - Angular 的 "unidirectional data flow rule"是什么?

转载 作者:太空狗 更新时间:2023-10-29 17:05:26 26 4
gpt4 key购买 nike

Angular的“单向数据流规则”被提及several times in the docs但是 Angular 文档在任何地方都没有清楚地(强调清楚地)定义单向数据流规则。

以下是我能找到的与单向数据流规则的明确定义最接近的内容:

来自 this page :

Angular's unidirectional data flow rule forbids updates to the view after it has been composed.

很公平,但是 View 已经组合到底意味着什么?什么构成对 View 的更新?我们不是一直在更新 View 吗?

来自 this page :

One important assertion [enableProdMode] disables verifies that a change detection pass does not result in additional changes to any bindings (also known as unidirectional data flow).

这句话我不得不非常缓慢地读了大约 8 遍,但我还是没明白。当它说“也称为单向数据流”时,我假设也称为单向数据流的是“更改检测通过不会导致对任何绑定(bind)的额外更改”。好吧,也许我们越来越近了。虽然很抽象。举个例子怎么样?


这两个相当不透明的简介都是 Angular 文档显然让我们摆脱了关于单向数据流规则的问题。似乎不够。

谁能更清楚地向我解释一下,最好是好像我很愚蠢?


编辑:我在 this page 上发现了可能是第三条线索的内容:

A template expression should not change any application state other than the value of the target property.

This rule is essential to Angular's "unidirectional data flow" policy. You should never worry that reading a component value might change some other displayed value. The view should be stable throughout a single rendering pass.

好的。您永远不必担心读取组件值可能会改变其他一些显示值。 那是 Angular 的单向数据流规则吗?我不这么认为,因为它似乎与该规则的其他提及不一致。我还是很困惑。

最佳答案

在 Angular v1.5 之前的版本中,双向绑定(bind)是常态,所以如果你在组件中创建了一个子对象,父对象会维护对它的引用,所以如果你更新父对象中的对象,它也会更新子对象,如果您更新了子对象中的对象,它也会更新父对象。这会产生大量开销,并且您会看到大量子组件维护与父组件的两种方式绑定(bind)的显着性能影响,例如,父容器组件加载乘客数据列表并为每个组件显示一个子组件passenger 具有该乘客的特定属性。 parent 会受到关注,每个 child 都会受到关注,他们会不断地被重新评估。

Angular1.5 中引入了一种数据绑定(bind)方式,但它是 Angular2 性能提升的重要组成部分。数据从父级流向子级,而不是相反。如果父数据发生变化,这些变化会被推送给子数据,但如果子数据发生变化,这些变化不会自动神奇地传播回父数据。您可以通过显式向父级发送一个包含已更改数据的事件,并指示父级更新已更改的特定数据来管理从子级到父级的更新。一种方式是数据流接管,父级使用更新的数据根据​​需要更新子级。

关于angular - Angular 的 "unidirectional data flow rule"是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42634822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com