更改检测后angular2如何渲染视图?

更改检测后angular2如何渲染视图?,angular,rendering,angular2-changedetection,Angular,Rendering,Angular2 Changedetection,我读了很多关于变更检测的文章,但并没有弄清楚它是如何工作的以及如何呈现视图的。就像在react中一样,我们有虚拟dom和diff算法,它只呈现通过创建dom补丁而更改的UI的一部分,因此angular如何知道UI的哪一部分需要更改 更改检测如何决定在视图中呈现/替换哪些更改?每个组件都有一个关联的更改检测对象,Angular在运行时创建该对象。change detector对象跟踪所有模板绑定。当变更检测运行时,默认情况下,它会检查每个变更检测器对象中的每个模板绑定–即,它将以前的值与当前值进行

我读了很多关于变更检测的文章,但并没有弄清楚它是如何工作的以及如何呈现视图的。就像在react中一样,我们有虚拟dom和diff算法,它只呈现通过创建dom补丁而更改的UI的一部分,因此angular如何知道UI的哪一部分需要更改


更改检测如何决定在视图中呈现/替换哪些更改?

每个组件都有一个关联的更改检测对象,Angular在运行时创建该对象。change detector对象跟踪所有模板绑定。当变更检测运行时,默认情况下,它会检查每个变更检测器对象中的每个模板绑定–即,它将以前的值与当前值进行比较。如果检测到更改,新值将传播到DOM。因此,如果只有一个更改,则只更新DOM的一部分。如果发现更改,则不会重新渲染整个视图。。。只有更改的部分会受到影响


我的较长回答:

如果我有一个带有可编辑单元的网格(单元本身就是一个组件),并且我已经更新了单元的值,那么它是否只重新渲染单元的一部分或整个网格?事实上,单元格值更新也将改变网格状态。@Akhlesh,这一切都取决于视图中的绑定。如果只有一个单元组件的绑定发生了更改(因为只有一个单元值发生了更改),则只有该单元的DOM才会用新值更新。如果网格以某种方式在其视图中使用该单元格的值,那么与网格关联的DOM也会得到更新。但在您的情况下,听起来只有一个单元格的DOM会被更新。仅仅因为整个网格状态发生了变化(因为单元格发生了变化),并不意味着Angular将重新渲染整个网格。在这方面,它与其他框架不同。更有效。@Akhlesh,如果单元格组件是叶组件(意味着它们没有自己的子组件),并且它们的值仅依赖于输入原语属性(即字符串或数字),则应使用
OnPush
使单元格检查更有效。谢谢标记。是的,细胞是叶子的组成部分