【发布时间】:2018-08-03 13:50:28
【问题描述】:
我想问一下 *ngIf 绑定到函数返回值的问题。比较 *ngIf 绑定到属性时是否会产生性能开销。
这只是询问概念的示例代码,数据结构比DataService中的复杂。启用标志将保存在地图对象中。这只是一个简单的表达方式:
在打字稿服务中
export class DataService() {
private enable: boolean;
isEnable() {
return enable;
}
getEnableValue() {
return enable;
}
update(flag: boolean) {
enable = flag;
}
}
在html中,
<div *ngIf="isEnable()">
<p> {{ testObject.value }}</p>
</div>
在打字稿中,
isEnable() {
return this.dataService.isEnable();
}
对比
在html中,
<div *ngIf="isEnable">
<p> {{ testObject.value }}</p>
</div>
在打字稿中,
isEnable: boolean;
ngOnInit() {
isEnable = this.dataService.getEnableValue()
}
对于*ngIf="isEnable",我可以理解。但是对于函数绑定,是角度检查函数中的属性并监控它的变化吗?有什么性能差异吗?
非常感谢。
【问题讨论】:
-
将
console.log("hello")添加到您的函数中,您就会知道。它在每次更改检测时调用,以了解是否应该从 DOM 中添加或删除元素。 -
它会根据您的功能的复杂性而产生性能差异。如果您只有一个属性绑定,那么它只是检查该属性。如果您有一个循环遍历数组中的 3,000 个项目的函数,那么该循环将在每次触发更改检测时运行。所以是的,在性能方面,属性变量更好。
-
我知道 *ngIf 是在 DOM 中添加或删除。可能是我的问题不清楚。我想问的是,分配给*ngIf的函数的值变化和属性的值变化,是否会影响2种不同风格写作的性能?
-
这取决于
this.dataService.isEnable()在返回值之前必须做什么。 -
Angular 将不得不重新评估函数以了解它是否已更改。我会使用 Subject 或 BehaviourSubject 来避免这种情况。
标签: angular