ng-repeat - 我对此感到困惑

时间:2016-01-17 22:40:46

标签: angularjs angularjs-ng-repeat

我对角js很新,我有一个关于ng-repeat的问题。我跟随AngularJs的例子:https://docs.angularjs.org/guide/concepts

我目前所在的部分是“添加UI逻辑:控制器'”。如果你看一下index.html,特别是代码:

<span ng-repeat="c in invoice.currencies">
      {{invoice.total(c) | currency:c}}
    </span>

当我在浏览器中运行时,一切都按预期工作,但我注意到invoice.total函数运行至少6次。我怎么知道?在index.js中我在total函数中添加了一个console.log函数,如下所示:

this.total = function total(outCurr){
    console.log(outCurr)
    console.log(this.convertCurrency(this.qty * this.cost, this.inCurr, outCurr))
    return this.convertCurrency(this.qty * this.cost, this.inCurr, outCurr);
  };

我希望代码运行3次,因为invoice.currencies只有3项:

this.currencies = ['USD', 'EUR', 'CNY'];

但是,这是我在浏览器控制台窗口中看到的内容: enter image description here

有什么想法吗?提前谢谢你?

1 个答案:

答案 0 :(得分:0)

user2341963可能有很好的答案所以我先引用它,然后我会添加一些精确度。

  

摘要周期至少运行两次,以检查值是否已经完成   改变。第一次运行此货币中的每个值。   它再次运行以检查第一个摘要周期是否没有改变   值。它并没有在第二个周期后停止

在角度上你有我们称之为摘要周期的东西。此循环监视应用程序中发生的任何更改绑定到angular。为了刷新它。这允许在您需要时刷新DOM而无需刷新整个页面。

“绑定角度”意味着

  1. {{}}
  2. 之间的每个块
  3. 每次使用范围。$ watch或attrs。$观察指令大量使用(ng-model / ng-repeat /...).
  4. 我不知道是什么让这个循环在启动时触发两次,这可能是因为你使用了一些内部机制或过滤器。请查看此链接以获取更多信息:https://www.ng-book.com/p/The-Digest-Loop-and-apply/