【问题标题】:AngularJS 1.6 - $onChanges executing twiceAngularJS 1.6 - $onChanges 执行两次
【发布时间】:2018-02-03 21:09:38
【问题描述】:

我可能想多了,这就是我在这里的原因。 :)

注意:在以下示例中,对象“ctrl”是组件的控制器别名。 var ctrl = this;

假设我们有一个组件有两个绑定,其中一个是可选的:

bindings: { 
   params: '<', 
   company: '<?' 
}

公司有时可用,有时不可用。

$onChanges 看起来像:

ctrl.$onChanges = function(changes) {
    if (changes.params || changes.company) {
        console.log('executed');
    }
}

似乎当两个绑定都更新时,$onChanges 运行了两次。第一次, ctrl.company (绑定)在组件中为空,即使我确实使用值更新了该绑定。第二次, ctrl.company 有它的价值。

现在,我了解到 OR 操作可能不正确。我只是有点不确定 $onChanges 的作用。

如果我对问题的描述不清楚,我会更新。

提前致谢。

【问题讨论】:

    标签: javascript angularjs angularjs-digest


    【解决方案1】:

    From Angular code:

    $onChanges(changesObj) - 每当单向 (&lt;) 或插值 (@) 绑定更新时调用。这 * changesObj 是一个散列,其键是已更改的绑定属性的名称,值是 * { currentValue, previousValue, isFirstChange() } 形式的对象。使用此钩子触发更新 * 克隆绑定值等组件,防止外部值意外突变。

    所以在我看来,您有 2 个绑定项:paramscompany 导致 $onChanges 触发两次。

    如果你想写一次日志,我会写&amp;&amp;

    if (changes.params && changes.company) {
        console.log('executed');
     }
    

    【讨论】:

      猜你喜欢
      • 2018-05-29
      • 1970-01-01
      • 2013-03-10
      • 1970-01-01
      • 2020-03-11
      • 1970-01-01
      • 2017-04-27
      • 2011-11-30
      • 1970-01-01
      相关资源
      最近更新 更多