这是由于您使用函数来评估返回值所致。
如果您在.ts文件的属性中设置此函数的结果,然后在*ngIf
中使用此属性,则不会有问题。
这是因为Angular不知道要检查什么值,所以每次触发changeDetection时都会调用该函数。
以下是提供示例的示例:
activeFilter;
onFilterChange(event) {
if (this.officeService.selectedFilter[0] === Filters.SHOW_ALL) {
this.activeFilter = true;
}
this.activeFilter = this.officeService.selectedFilter.includes(filter);
}
*ngIf="activeFilter"
当然,这是一个示例代码,需要更多的思考,并且仅仅是一个不完整的示例。
您还可以通过使用组件装饰器中的ChangeDetectionStrategy : OnPush
来改进changeDetection触发方式,以便仅在更改组件中的@Input()
时才会发生更改检测周期。 / p>
,
首先:为什么您的组件多次渲染是一个问题?您应该不会有任何性能问题,因为IResult getResult = new IResult()
{ @Override
public void notifySuccess(String requestType,String response) {
}
@Override
public void notifyError(String requestType,VolleyError error) {
}
};
是为这些操作而设计的。
之所以如此频繁地渲染组件,是因为只要组件中发生某些更改,Angular就会触发*ngIf
。然后,检查是否更改了视图中的所有变量,指令。
为了避免这种情况,您可以采取的措施是通过添加另一个如下所示的changeDetectionStrategy来防止在组件装饰器中这样做:
ChangeDetection
现在,您的组件仅在@Component({
// ...other ocmponent decorator properties
changeDetection: ChangeDetectionStrategy.OnPush
})
参数发生更改或明确告诉您时才触发changeDetection。
因此,现在,无论何时更改过滤器(或在组件中执行其他未通过@Input()
参数触发的操作,都需要手动触发changeDetection。
因此,首先通过DependencyInjection将其注入您的构造函数中:
@Input()
然后,在执行更改后调用它:
constructor(private cd: ChangeDetectorRef) {}
希望有帮助。
本文链接:https://www.f2er.com/2852804.html