据我了解,Angular指令通过遵循框架的LifeCycleHook节奏来工作。换句话说,在循环中的某些时间检查它们,以便每秒检查几次相关值。但是,我想知道是否可以控制这些检查。
例如,假设我有一个NgFor链接到一个包含1000个对象的数组。将会发生的是每个对象每秒都会被检查几次。每秒几千次检查。但这对我不起作用。这比我想要的要多得多。
我感兴趣的是,仅在页面初始化以及用户的某些操作期间检查我的NgFor。
所以我的问题是:
是否有可能使Angular指令,尤其是NgIf和NgFor,不再按照LifeCycleHook的节奏执行检查,而是仅在我希望它们执行时才执行检查?还是我必须使用纯HTML / CSS / Javascript方法执行此操作?
为了解决此问题,我已经研究了TrackBy。但是,这不会改变问题的核心。仍然需要执行几千次检查。除了它们将是值的检查而不是对象。
您是否尝试过使用ChangeDetectionStrategy.OnPush?
@Component({
selector: 'app-my-component',
templateUrl: './my-component.html',
changeDetection: ChangeDetectionStrategy.OnPush
})
export class MyComponent implements OnInit {
constructor(private changeDetector: ChangeDetectorRef) {
}
prop1: string;
prop2: string;
someMethod(): void {
prop1 = 'abc';
// *ngIf won't be checked yet
prop2 = 'xyz';
// nor here
this.changeDetector.detectChanges();
// now it will
}
}