Angular 角度4,试图理解变化检测

Angular 角度4,试图理解变化检测,angular,angular2-changedetection,Angular,Angular2 Changedetection,我试图理解change detection和ChangeDetectionStrategy.OnPush实际上是如何工作的,下面是一个我无法理解的奇怪的例子: 我使用以下模板创建父组件: <app-matrix-reader *ngFor="let m of fooService.getMatrices()" [matrix]="m"></app-matrix-reader> 子组件应用程序矩阵读取器具有输入文本 <input type="text" [(n

我试图理解change detection和ChangeDetectionStrategy.OnPush实际上是如何工作的,下面是一个我无法理解的奇怪的例子:

我使用以下模板创建父组件:

<app-matrix-reader *ngFor="let m of fooService.getMatrices()" [matrix]="m"></app-matrix-reader>

子组件应用程序矩阵读取器具有输入文本

<input type="text" [(ngModel)]="matrix.a" /><br/>

如果我只是多次点击输入(即使没有改变其值),就会调用函数getMatrix

为什么调用函数getMatrix()?我还将changeDetectionStrategy.OnPush放在一起,这样只有当组件的输入被更新时,才应该检查和更新组件

谢谢你看这个答案

当Ж

2) 绑定事件(如
(单击)
或某个主机侦听器)从组件触发(这是您的情况)

如果我只是多次点击输入(即使没有 更改其值)调用函数GetMatrix

您正在启动,因此angular会将树标记到要检查的组件并执行更改检测查看此答案

当Ж

2) 绑定事件(如
(单击)
或某个主机侦听器)从组件触发(这是您的情况)

如果我只是多次点击输入(即使没有 更改其值)调用函数GetMatrix


您正在启动angular,因此angular会将树标记到要检查的组件并执行更改检测

angular只是检查输入和输出后是否有更改,要检查是否需要将原始值与当前值进行比较,Sangular只是检查输入和输出后是否有变化,为了检查它是否需要将原始值与当前值进行比较,有没有办法避免它?我不明白为什么即使使用ChangeDetectionStrategy.OnPush,它也会发生这种情况,它应该设置ChecksEnabled=false,对吗?@user2010955 Angular resets ChecksEnable当我看到处理事件时,pfff,我的应用程序在一个复杂的多层树中创建了许多子组件,并且随着时间的推移,它变得很慢。我必须了解更改检测是如何工作的,跳过一些无用的默认更改检测周期。看看这个答案,有没有办法避免它?我不明白为什么即使使用ChangeDetectionStrategy.OnPush,它应该设置ChecksEnabled=false,对吗?@user2010955 Angular resets ChecksEnable当我看到handle事件时,pfff,我的应用程序在一个复杂的多级树中创建了很多子组件,并且随着时间的推移变得缓慢,我必须理解变更检测的真正工作原理,跳过一些无用的默认变更检测周期看看这个答案