Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular 2是否进行了重新渲染优化?_Javascript_Angular_Angular2 Template - Fatal编程技术网

Javascript Angular 2是否进行了重新渲染优化?

Javascript Angular 2是否进行了重新渲染优化?,javascript,angular,angular2-template,Javascript,Angular,Angular2 Template,几个月来我一直在使用React,React并不是简单地完全重新呈现一个组件,而是发现差异并进行更改。Angular 2是这样做的吗 而且,无论何时检测到状态变化,Angular 2都会重新渲染根节点中的所有组件,还是只重新渲染检测到变化的特定组件及其子树?Angular仅在检测到变化的位置渲染

几个月来我一直在使用React,React并不是简单地完全重新呈现一个组件,而是发现差异并进行更改。Angular 2是这样做的吗


而且,无论何时检测到状态变化,Angular 2都会重新渲染根节点中的所有组件,还是只重新渲染检测到变化的特定组件及其子树?

Angular仅在检测到变化的位置渲染

<<代码> *ng/<代码>中有一些改进的地方,当在中间或开始时添加或删除某些项时,它有时会渲染太多的项目,但这是一个已知的问题,最终将被修复。

根据我下面的评论

事实上,Angular不需要重新渲染优化,因为它只在绑定值更改时执行任何操作,然后只更改绑定到更改值的DOM。Angular没有需要镜像到实际DOM的虚拟DOM


Angular没有像React那样使用虚拟DOM。在这种情况下,没有必要这样做

如果您有
,并且需要在运行时将其值设置为其他值,则不需要更改它周围的所有DOM。只需对该元素调用setValue(),就可以了

这同样适用于任何其他DOM元素。例如,如果您有:

<div>{{someVar}}</div>
{{someVar}

Angular2检测到某些变量已更改,它将仅更改Angular2用于onChange渲染的特定

的内容。通常,当检测到更改时,它将触发该组件和所有子组件的changeDetection,但您也可以控制更改,强制渲染某些内容,或者在不喜欢angular2行为时不渲染

下面是一个关于如何工作的非常好的讨论:

LE:只是澄清一下,它不会重新渲染组件和所有子组件,它会检测并触发所有这些组件的更改,但只渲染必要的内容

React并不是简单地完全重新呈现组件,而是找到差异并进行更改。Angular 2是这样做的吗

概念上是的,它不会重新渲染整个组件

Angular为每个组件/指令构建一个变更检测器对象。模板绑定(包括输入属性绑定)在这些更改检测器对象中进行跟踪。默认情况下,在运行更改检测时,会对每个绑定进行脏检查以查看更改。如果发现更改,则更改的值将传播到子组件(如果输入属性更改)或DOM。就这样。不会重新渲染整个模板/视图。只有更改的值才会在DOM中更新。当角度变化检测完成时,浏览器会注意到DOM的变化并更新我们在屏幕上看到的内容

无论何时检测到状态变化,Angular 2都会重新渲染根节点中的所有组件,还是只重新渲染检测到变化的特定组件及其子树

Angular不检测对某些模型/数据对象的更改。相反,它只检测模板绑定的更改

默认情况下,每次运行更改检测时,它都从根组件开始,使用这些更改检测器对象按深度优先顺序检查所有组件的更改。如上所述,仅更新带有更改的模板绑定。所以,我不会说Angular会重新渲染组件。。。它只修改DOM中模板绑定发生更改的部分


您可以将组件配置为使用
OnPush
更改检测策略来限制何时检查该组件及其子组件的更改。您还可以完全从更改检测器树中创建一个组件,这意味着在您重新附加()之前,不会检测到该组件及其子体的更改。

它是从根组件重新呈现所有内容,还是仅从状态已更改的组件重新呈现?在“添加/删除”上下文中,“重新呈现”是什么意思?当项目被添加时,它会第一次呈现它,当“删除”时,项目就被删除了。我们不能理解单词的英语意思吗?我想知道Angular 2是做什么的?它是从根组件重新呈现所有内容,还是只重新呈现状态已更改的组件?@NarayanPrusty Angular更新绑定
{{someValue}
。除了在初始加载时重新渲染一次之外,它不会从根重新渲染所有内容。事实上,Angular不需要重新渲染优化,因为它只在绑定值更改时执行任何操作,然后只更改绑定到更改值的DOM。Angular没有需要镜像到实际DOM的虚拟DOM。“当检测到更改时,它将触发changeDetection”——我不明白这意味着什么。更改检测必须已经运行/触发,然后才能检测到更改。也许您的意思是“当(zone.js monkey patched)事件触发时,它将触发更改检测”@MarkRajcok
setValue()
这里有任何设置输入元素值的函数。类似于jQuery
$.val(…)
或DOM属性分配:
input.value=“…”