Angular JS:为什么{{objA.objB.date |日期:'dd.MM.yyyy HH:mm'}}需要很长时间?

时间:2016-09-20 09:15:36

标签: javascript angularjs performance batarang

在Chrome开发工具的AngularJS标签中(我正在使用AngularJS Batarang(稳定))。我有以下几行,描述哪些监视表达式花费最多时间来评估(如果一个表达式多次调用,则添加评估时间)

{{objA.objB.date | date:'dd.MM.yyyy HH:mm'}} | 20.1% | 1009ms
{{objA.objB.date | date:'dd.MM.yyyy, HH:mm'}} | 22.8% | 1148ms

问题是为什么这样的评估花了这么多时间?

1 个答案:

答案 0 :(得分:1)

我认为"正常"对于Angular,因为一旦某些内容发生变化,Angular每个$ digest周期运行两次过滤器(包括日期过滤器)。这会对性能造成影响。第一次运行是从$$观察者检测到任何变化,第二次运行是为了查看是否还有需要更新值的更改。

如果您可以更改DOM过滤器:

{{objA.objB.date | date:'dd.MM.yyyy HH:mm'}}

使用$ filter提供程序,您可以使用它在控制器中运行过滤器,然后将它们解析到DOM中,然后在将数据发送到视图之前对其进行预处理,从而避免了解析DOM和理解内联过滤器的步骤语法:

$scope.theDate = $filter('date')(objA.objB.date, 'dd.MM.yyyy HH:mm');