2017-08-25 121 views
0

我可能在想这个,所以我在这里。 :)

注意:在下面的示例中,对象“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的功能。

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

在此先感谢。

回答

1

From Angular code:

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

所以从我的观点,你有2级绑定的物品:paramscompany这导致$onChanges两次扳机。

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

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