3

AngularJSChrome 开发工具选项卡中(我正在使用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

问题是为什么这样的评估需要这么长时间?

4

1 回答 1

1

我认为这对 Angular 来说是“正常的”,因为一旦发生变化,Angular 每个 $digest 周期都会运行每个过滤器(包括日期过滤器)两次。这会影响性能。第一次运行来自 $$watchers 检测任何更改,第二次运行是查看是否有需要更新值的进一步更改。

如果您可以更改 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');
于 2016-09-20T09:29:46.153 回答