javascript - Angular:是否可以使 Angular 指令(例如 NgIf 和 NgFor)仅在我想要的时候检查它们绑定的变量?
问题描述
我的问题
据我了解,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
}
}
推荐阅读
- impala - Impala 配置文件中的 TotalStorageWaitTime 参数是什么意思?
- grep - 格式化 nmap 输出
- javascript - 将缓冲区从 ReadStream 更改为实际文件
- python - 来自 Python 的 Athena InvalidRequestException
- c# - 为什么 WPF 应用程序不启动两个 .exe 应用程序?
- c# - Erase only one already printed character from the console in c#
- java - IntelliJ IDEA is not recognizing my java files as runnable and instead wants to run the class files. Any ideas of how to fix?
- micronaut - Micronaut 框架 / 已登录但未经授权
- javascript - problems with for loop inside another for loop Javascript
- java - SpringBootTest - Consider defining a bean of type 'java.lang.String' in your configuration