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



我有一个页面,其中有许多指令。在头/导航中有许多指令,每个指令都有自己的作用域。还有一个包含25个项目的ng-repeat,其中每一个都创建了一个指令,每个指令都有自己的作用域。

其中一个指令包含一个表单,其中包含一个自定义过滤器来显示表单错误,它看起来像这样:
<span>{{ createProjectForm.name.$error | nagParseErrors }}</span>

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

是有什么我可能做错了这里或这实际上是如何在AngularJS工作?

顺便说一句,我现在意识到显示错误可能更好作为一个指令比过滤器,我计划走指令路线,但我想澄清我对过滤器的理解在这里,因为我可能会在某个时候遇到这条路。

这个问题已经解决过很多次了。在应用的整个生命周期中,所有AngularJS表达式都会被不断地重新求值。这就是AngularJS中的双向数据绑定的工作方式。

所以,你的代码没有任何问题。只是你需要确保你的过滤器是幂等的(给定相同的输入返回相同的输出)。

更多信息请看为什么Scope.$apply()调用$rootScope.$digest()而不是this.$digest()?

最新更新