2017-08-25 123 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'); 
}