2016-07-29 9 views
2

私は1.5について初めてで、片方向データフローのベストプラクティスを学んでいます。私はこのjsfiddleから離れることになり、特に1つの行動について本当に混乱しています。角度1.5 - 片方向のデータフロー - 親子子プリミティブの値を最初に更新します。

データが親から子に流れ込み、片方向にバインドされていることを理解しています。つまり、子の変更は親に影響しません。この問題は常に問題のオブジェクトに当てはまると思われますが、プリミティブの場合、一方向データフローは最初に発生しますが、プリミティブ値は分離コンポーネントの値更新関数で定義されているものと同じです(10)。ですから、次の操作を実行した場合:

  1. クリックすると、「親の値の変更」、子供はデータを受信し、 が更新されます。 10へ
  2. クリックして「変更アイソ値」分離株/子供プリミティブ 値が変化すると、親は
  3. 影響はありません「の変更親 値」を経由して親の値を更新した後、再び、分離株プリミティブ値が10であることを確認 永遠に、オブジェクトが正しく更新されます。それはなぜですか、また、角度1.5の片方向のデータフローのベストプラクティスを実行している最中に、子が更新された のプリミティブ値をどのように受け取ることができますか?

https://jsfiddle.net/toddmotto/wauana12/

this.updateValues = function() { 
    this.prim = 10; 
    this.obj = { 
    john: { 
     age: 35, 
     location: 'Unknown' 
    } 
    }; 
}; 

更新:親コントローラ で ので、内部this.updateValuesは私が

this.somePrimitive = Math.random(); 

this.somePrimitive = 33を変更し、それは私が期待される道を働いた、Iどうして分かりにくいのか、理解を助けることに感謝しています...


アップデート2:私は、親コントローラupdateValues機能は、実際にプリミティブに変更を加えていないので、それはあると思うので、子供が更新を認識するための方法はありません。上記の更新はプリミティブに変更を強制します。オブジェクトは参照されるため、常に変更されます。

しかし、私はここでデータバインディングが失われ、壊れてしまった(React ftw)のような気がします。親の$ watchに頼るのではなく、手動で子を更新する必要はありますか?

答えて

1

親コントローラのupdateValues関数が実際にプリミティブに変更を加えていないため、子が更新を認識することができないためです。上記の更新(Math.random())は、プリミティブに変更を強制します。オブジェクトは参照によって常に変更されますが、プリミティブは不変なので変更されません。おそらく、子コンポーネントに再割り当てされるはずのプリミティブを渡すことをお勧めします。オブジェクトを使って角度変化の検出をうまくやります。

関連する問題