【问题标题】:Angular Watchers for expressions表达式的 Angular 观察者
【发布时间】:2017-04-07 09:47:42
【问题描述】:

我回到 Angular 并一直在阅读有关摘要周期和观察者的文章,我读过的一篇文章说,对于 {{}} 中的表达式,Angular 将在每个周期中对其进行评估。

鉴于以下情况,是否会设置 3 个观察者(数量、成本和花括号中的表达式)?

<div ng-app ng-init="qty=1;cost=2">
  <b>Invoice:</b>
  <div>
    Quantity: <input type="number" min="0" ng-model="qty">
  </div>
  <div>
    Costs: <input type="number" min="0" ng-model="cost">
  </div>
  <div>
    <b>Total:</b> {{qty * cost | currency}}
  </div>
</div>

sn-p 取自 angular developer guide,当说 qty 变量增加并且摘要触发时,它是否根据绑定到 qty 的观察者更新模型,然后调用另一个观察者来更新花括号中的表达式?

文章说每次循环运行时都会触发表达式观察器,即使这两个模型变量没有改变。

谢谢

【问题讨论】:

标签: javascript angularjs digest


【解决方案1】:

是的,这是 $digest 循环,观察者被解雇了。 当观察者被触发时,AngularJS 评估作用域模型,如果它发生了变化,则调用相应的监听器函数。

【讨论】:

  • 是的,我明白这一点,但我想知道的是,如果一个单独的观察者附加到花括号中的表达式上?如果无论变量是否改变,每个摘要循环都会触发这个?
  • 是的,所有手表都会在 $digest 循环时触发,您可以使用 {{::qty * cost | currency}} 以绑定观察者一次
  • 即使它们具体依赖的值没有改变,运行所有表达式不是很麻烦吗?如果在大型应用程序中,如果范围变量在代码深处发生变化,为什么要让每个表达式重新计算?它不应该是唯一依赖于该变量的变量吗? @locropulenton
猜你喜欢
  • 2021-04-13
  • 1970-01-01
  • 2016-02-20
  • 2023-04-10
  • 1970-01-01
  • 2012-01-03
  • 1970-01-01
  • 1970-01-01
  • 2013-02-12
相关资源
最近更新 更多