为什么Angular过滤器运行两次?

时间:2014-04-30 14:55:21

标签: javascript angularjs angularjs-directive angularjs-scope angularjs-ng-repeat

所以这里是一些简单的示例代码,我在今天学习Angular时从一个例子中设置。

jsFiddle link

夫妻问题:

  1. 如何知道运行categoryFilterFn。我猜测绑定到html视图的任何内容,$scope以某种方式被执行"如果"有变化。

  2. 为什么过滤器运行两次?如果您运行该示例,您将看到四个产品的八个控制台语句。即使我将它全部移动到一个控制器中,它仍然会这样做。

1 个答案:

答案 0 :(得分:2)

  

如何知道运行categoryFilterFn。我猜测任何绑定的东西   到html视图和$ scope以某种方式执行“以防万一”   有变化。

是的,Angular摘要循环会进行脏检查以查看是否有任何更改。它在监视队列中执行此操作(根据它们是否绑定在UI中,事物将放入监视队列中。)

  

为什么过滤器会运行两次?如果您运行该示例,您将看到   四个产品的八个控制台声明。即使我把它全部移动了   进入一个控制器,它仍然这样做。

同样,Angular使用脏检查(here is a good article about it)。基本上,在摘要周期开始期间,观察值被解析。然后,在摘要周期结束时,再次解析该值(这是第二次调用)。如果值不匹配,则UI将替换为新值。简单来说,这就是双向绑定的工作原理。