Angular 角度模板表达式中的更改检测调用函数的次数过多

Angular 角度模板表达式中的更改检测调用函数的次数过多,angular,date,data-binding,angular2-changedetection,Angular,Date,Data Binding,Angular2 Changedetection,我在我的angular应用程序中都有类似的日期: {{ stringAsDate(entry.followUpDate) | date:"yMdjm" }} stringAsDate函数如下所示: stringAsDate(dateStr: any) { if(dateStr != null){ return new Date(moment(dateStr).seconds(0).milliseconds(0).toISOString()); } } stri

我在我的angular应用程序中都有类似的日期:

{{ stringAsDate(entry.followUpDate) | date:"yMdjm" }}
stringAsDate函数如下所示:

stringAsDate(dateStr: any) {
    if(dateStr != null){
        return new Date(moment(dateStr).seconds(0).milliseconds(0).toISOString());
    }
}
stringAsDate()函数在所有浏览器中都必须具有相同的日期。(因为不同的浏览器对newdate()的评估不同,所以我得到了不一致的结果。)无论如何,这是可行的。但是,stringAsDate()在每次更改检测(每次单击等)时都会被调用,因此应用程序的性能非常差,因为我到处都有这些日期


有没有办法避免stringAsDate()被多次调用?

在Angular4中,将函数声明中的get关键字放在其名称之前,这样您就可以将模板中的函数作为属性引用(在大括号内)。

我建议您不要调用类似于模板中的函数。在将此变量传递给模板之前,您可以在组件中执行此操作。。。或者创建一个纯
管道
。顺便说一句,这是不是在一个
*ngFor
?你有没有研究过变化检测策略?本应提高性能,但也需要仔细实施。。这有点危险。使用OnPush策略,您可以在何时何地启动更改检测,以及检查哪些组件的更改。然后出现错误“get”访问器不能有参数。“@KevinQuiring,然后我建议您进行一些重构。能否将dateStr参数移动到组件类中,并在组件构造期间或在ngOnInit方法中初始化它一次?