Javascript 为什么角度过滤器运行两次?

Javascript 为什么角度过滤器运行两次?,javascript,angularjs,angularjs-directive,angularjs-scope,angularjs-ng-repeat,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,Angularjs Ng Repeat,下面是一些简单的示例代码,我是在今天学习Angular时从一个示例中设置的 两个问题: 它如何知道运行categoryFilterFn。我猜绑定到html视图和$scope的任何内容都是在“万一”发生更改时执行的 为什么过滤器要运行两次?如果运行该示例,您将看到四种产品的八条控制台语句。即使我把它全部移动到一个控制器中,它仍然会这样做 它如何知道运行categoryFilterFn。我猜有没有装订好的 到html视图,$scope以某种方式只是“以防万一”执行 有变化 是的,角度摘要循环进行脏

下面是一些简单的示例代码,我是在今天学习Angular时从一个示例中设置的

两个问题:

  • 它如何知道运行
    categoryFilterFn
    。我猜绑定到html视图和
    $scope
    的任何内容都是在“万一”发生更改时执行的

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

  • 它如何知道运行categoryFilterFn。我猜有没有装订好的 到html视图,$scope以某种方式只是“以防万一”执行 有变化

    是的,角度摘要循环进行脏检查,以查看是否有任何变化。它通过监视队列执行此操作(并且根据它们是否在UI中绑定而将它们放入监视队列)

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


    同样,Angular使用脏检查()。本质上,在摘要周期的开始期间,关注的值被解析。然后,在摘要周期结束时,再次解析该值(这是第二次调用)。如果值不匹配,UI将替换为新值。简单地说,这就是双向绑定的工作原理。

    我猜每个摘要都会运行过滤器。你的代码恰好产生了2个摘要?也许吧?很高兴见到你。这让我很困惑,因为我实际上没有改变任何事情。它只是在
    prdouctList
    控制器中设置了一个局部变量。无论如何,它都不会改变数据。它似乎只运行附加到
    $.scope
    的每个方法,这些方法也在视图中的某个地方使用。或者你想说的是,每次你与页面交互时,整个事情都会重新加载?你应该看看我引用的那篇文章。每一个导致摘要的更改,都会检查所有内容,然后重新绑定任何受影响的内容。好吧,现在这更有意义了。我想下一个问题是,是否有任何优化?是的,如果不想观看,可以使用。在即将发布的版本中,我也希望从核心角度得到一些帮助。