2017-08-25 7 views
0

私はこれを過度に考えている可能性があります。 :)

注:次の例では、オブジェクト "ctrl"はコンポーネントのコントローラエイリアスです。 var ctrl = this;時にはそれはないですが、時々、会社が利用可能である

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

のは、我々は1がオプションである2つのバインディングを持つコンポーネントがあるとしましょう。

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

両方のバインディングが更新された場合、$ onChangesが二回実行されるようだ:

$ onChangesは次のように見えます。初めて、値でそのバインディングを更新したにもかかわらず、コンポーネントのctrl.company(バインディング)はnullです。もう一度、ctrl.companyには価値があります。

ここで、OR演算が正しくない可能性があることを理解しています。私はちょっと$ onChangesがどのように機能するか少し不安です。

問題の説明が不明な場合は、更新します。

ありがとうございます。

答えて

1

From Angular code:

$onChanges(changesObj) - 一方向(<)または補間(@)バインディングが更新されるたびに呼び出されます。 * changesObjは、変更されたバインドされたプロパティの名前をキーとするハッシュであり、値はの *オブジェクトです。このフックを使用して、外部値の偶発的な変更を防ぐために、バインドされた値を複製するなど、 *コンポーネント内の更新をトリガーします。 paramsと二回$onChangesトリガーに原因company

は、だから私のビューから、あなたは2つのバインドアイテムを持っています。

一度ログイン書きたい場合は、私は&&を記述します。

if (changes.params && changes.company) { 
    console.log('executed'); 
} 
関連する問題