调用AngularJS过滤器与页面上的作用域数量相关吗?

时间:2013-06-19 14:25:51

标签: angularjs angularjs-filter

我有一个包含许多指令的页面。标题/导航中有许多指令,每个指令都有自己的范围。还有25个项目的ng-repeat,每个项目都创建一个指令,每个指令都有自己的范围。

其中一个指令包含一个表单,其中包含一个显示表单错误的自定义过滤器,如下所示:

<span>{{ createProjectForm.name.$error | nagParseErrors }}</span>

现在我担心的是,当任何范围内的任何内容发生变化时,nagParseErrors正在被执行约33次,即使这个数据createProjectForm.name绑定到(使用ng-model)只包含在控制器范围内包含表单的指令的范围(它只是从控制器范围传递给指令)。我知道它与页面上的范围(或指令)的数量有关,因为如果我将ng-repeat从25个项目限制为1,则过滤器仅被调用9次。这也适用于内置过滤器(如json,甚至可以运行更多次)。

我可能在这里做错了,或者这实际上是如何在AngularJS中运作的?

顺便说一句,我现在意识到显示错误可能会比作为指令路由更好,而不是我计划进行指令路由的过滤器但是我想在这里清理我对过滤器的理解,因为我可能会遇到这个问题。有一点在路上。

1 个答案:

答案 0 :(得分:0)

这已被多次解决。在应用程序的整个生命周期中,将不断重新评估所有AngularJS表达式。这就是AngularJS中的双向数据绑定的工作原理。

因此,您的代码没有任何问题。只是你需要确保你的过滤器是幂等的(在给定相同输入的情况下返回相同的输出)。

有关详细信息,请查看Why Scope.$apply() calls $rootScope.$digest() rather than this.$digest()?scope docs