【问题标题】:AngularJS : Why to check whether newValue is the same as oldValue in `$watch` listener?AngularJS:为什么要检查 newValue 是否与 $watch 监听器中的 oldValue 相同?
【发布时间】:2015-02-01 13:23:31
【问题描述】:

我多次看到下面的模式:

$scope.$watch('full_name', function(newVal, oldVal, scope) {

 if(newVal === oldVal) {
   return
 } else {
 }
}

我不太了解if(newVal==oldVal) 分支,因为它看起来没用。。监听器回调函数不应该只在监视值更改时调用吗?如果是这样,newVal 不应该总是与oldVal 不同吗? 如果没有,有没有人有关于newVal==oldVal 分支可以做什么的例子?

【问题讨论】:

    标签: javascript angularjs dom-events


    【解决方案1】:

    if (newVal === oldVal) 构造是跳过初始化。 AngularJS documentation 声明当你附加手表时,它会用undefined, undefined 调用一次回调。为防止您的 watch 函数将此调用误认为是模型更改,您可以添加 if 构造。

    在观察者注册到作用域后,监听器 fn 被异步调用(通过 $evalAsync)来初始化观察者。在极少数情况下,这是不可取的,因为当 watchExpression 的结果没有改变时调用了侦听器。要在侦听器 fn 中检测这种情况,您可以比较 newVal 和 oldVal。如果这两个值相同 (===),则由于初始化而调用了侦听器。

    【讨论】:

      猜你喜欢
      • 2015-08-02
      • 2018-07-27
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多