我知道在 Angular 中从模板调用表达式不是一个好习惯,因为 Angular 无法预测函数的返回值是否已更改,因此它需要在每次运行更改检测时执行该函数。
我的问题是 Angular 是否会对 Map.get('key1') 执行相同的行为 -> 它会在每个更改检测周期检查地图的值吗?
另外,我知道如何自己测试这个吗?
<ng-container *ngIf="myMap.get('key1')">....
很多人不知道为什么不使用 HTML 中的函数,因此通常建议不要使用它们。但据我所知,只要您了解以下说明,就可以这样做。
经验法则是不要对 HTML 函数使用资源密集型操作。因为他们会在每次检测到变更时被解雇。
对此进行解释。如果我们只使用一个在 HTML 中存储布尔值的属性
<div *ngIf="someBool">it's ok!</div>
但是对于数组的查找操作采用相同的场景。
<div *ngIf="showIfFound()">it's ok!</div>
ts
arr: any = new Array(10000).fill(null);
ngOnInit() {
this.arr[9999] = 1;
}
showIfFound() {
return this.arr.find(x => x === 1);
}
以上面的代码为例,每个变更检测周期需要循环 10000 行,因此应用程序的速度大大减慢。
希望你明白我的意思。
来到你的场景,我认为
map.get()
是O(1)
复杂性,因此随着数据集的增加,循环速度将是恒定时间,所以我认为你很好用。