如果我在角度模板中使用Map.get('key1'),变化检测机制是否每个周期都会检查地图值?

问题描述 投票:0回答:1

我知道在 Angular 中从模板调用表达式不是一个好习惯,因为 Angular 无法预测函数的返回值是否已更改,因此它需要在每次运行更改检测时执行该函数。

我的问题是 Angular 是否会对 Map.get('key1') 执行相同的行为 -> 它会在每个更改检测周期检查地图的值吗?

另外,我知道如何自己测试这个吗?

<ng-container *ngIf="myMap.get('key1')">....

angular angular-template angular2-changedetection
1个回答
0
投票

很多人不知道为什么不使用 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)
复杂性,因此随着数据集的增加,循环速度将是恒定时间,所以我认为你很好用。

© www.soinside.com 2019 - 2024. All rights reserved.