AngularJS 1から取得 ドキュメント :
?
:<?
または<?attr
を追加して、バインディングをオプションにすることもできます。
オプションのものは、一方向バインディングの非オプションのものとどのように異なりますか?
オプションバージョンの双方向(=
)バインディングとデリゲート(&
)バインディングの違いを、ここで私のフィドルで理解しているように見えます: https://jsfiddle.net/ glenn/ze2wo0s1 / ですが、一方向のものではありません。
ちなみに、とてもメリークリスマス! ????????????❤️
ソースコードでどのように処理されるかを確認できます: https://github.com/angular/angular.js/blob/master/src/ng/compile.js#L352 。
私には、<?
を使用してバインディングをオプションにすると、時計を設定しなくても早期に壊れてしまうように見えます。 use <
を使用してそれを必須にすると、バインディングがundefined
に設定され、ウォッチがセットアップされます。ただし、undefined
を監視しているように見えるため、実際には、recordChanges
への1回の呼び出しを除いてまったく違いはありません。必要なバインディングを省略した場合、必要なバインディングは、最初の呼び出しで$onChanges
フックに渡されるchanges
オブジェクトのキーになります。ただし、オプションのバインディングを省略すると、それはchanges
オブジェクトのキーにはなりません。
例については、これを参照してください JSFiddle 。 requiredBinding
とoptionalBinding
は両方とも省略されているため、undefined
に初期化されますが、requiredBinding
はchange
オブジェクトのキーです。 optionalBinding
はそうではありません。
<?
を使用すると、その変数が存在しない場合にのみ、コントローラーがバインドされるはずの変数の値を変更できるようになります。
オプションのバインディングは、存在しない場合はコントローラーで変更できます。値がコンポーネントに渡された場合、それを変更する方法はありません。
オプションではないバインディングは、変更できません。それらが存在しない場合、それらはundefined
であり、まったく変更できません。
たとえば、次のようになっているとします。
bindings: {
nameOptional: '<?',
nameRequired: '<'
}
コントローラでは、できません単に$ctrl.nameRequired = 'something else'
を実行して、ビューが更新されることを期待します。ただし、canは、name-optional
がコンポーネントに渡されない場合にのみ1つの条件でnameOptional
を使用して同じことを行うことができます。その場合にのみ、変数は変更するコントローラーです。
理解を深めるために、 このフィドル を参照してください。
簡単にするために、値で渡される文字列を使用していることに注意してください。オブジェクトを渡す場合、オブジェクトのプロパティは通常の状態でいつでも変更できます。