我试图理解变化检测和ChangeDetectionStrategy.OnPush实际上是如何工作的,这里是一个我无法理解的奇怪的例子:
我使用以下模板创建父组件:
<app-matrix-reader *ngFor="let m of fooService.getMatrices()" [matrix]="m"></app-matrix-reader>
子组件app-matrix-reader有一个输入文本 .
<input type="text" [(ngModel)]="matrix.a" />
如果我只是多次点击输入(即使不更改其值),也会调用函数getMatrices .
为什么函数getMatrices()被调用?我还放了changeDetectionStrategy.OnPush,因此只有在输入更新时才应检查和更新组件...
谢谢
1 回答
看看这个答案
Angular将在响应时运行更改检测周期
...
2) a bound event (like (click) or some host listener) is triggered from the component (that is your case)
您正在触发blur event on input,因此angular会将树标记到要检查的组件并执行更改检测