4

以下は、angularJS でバインディングがどのように発生するかについての私の理解です。専門家がフィードバック/コメントを提供できれば素晴らしいと思います..

<div ng-controller="ctrlA">
  {{myvar}}
  {{anothervar}}
</div>

$scope.watch( function (scope) {
    return scope.anothervar;
  } ,  function (oldValue, newValue) {
    // code to manupilate HTML with new value!!
  });

$scope.watch( function (scope) {
    return scope.myVar;
  } ,  function (oldValue, newValue) {
    // code to manipulate HTML with new value!!
  });

angularJS が {{myVar}} (および {{anothervar}}) に遭遇するとすぐに、(変数ごとに) ウォッチャーが内部的に作成されます。このウォッチャーは、コントローラー 'ctrlA' の $scope 用に作成されます。

関数が $timeout や ng-click などで呼び出されるたびに、それらは $scope.apply() 内に埋め込まれます。関数が実行された後 (一部のスコープ変数が変更される可能性があります)、$apply は rootScope でダイジェストを呼び出します。これにより、アプリ全体の変数が UI と同期されます。

$scope.digest が呼び出されると、そのスコープのすべてのウォッチャーを反復処理します。次に、変数の現在の値を取得し、変更されたかどうかを確認します。変更された場合は、ウォッチャー ハンドラーを呼び出します (新しい値を反映するように html を変更します!)。

ここで質問があります。angularJSストアには、ウォッチャーへの参照とそのウォッチャーの現在の値を含む、すべてのスコープ用のある種のキーマップ(またはデータ構造)がありますか?? 何かのようなもの:

watch ref (for myvar) -> current value (of myvar)
watch ref (for anothervar) -> current value (of anothervar)
4

1 に答える 1

0

Angular がバインディングごとにウォッチャーを設定する方法についてのあなたの理解は、ほぼ正しいと言えます。Angularバインディングの内部動作がどのように見えるかについてのあなたの見解を暴く/議論するのではなく、先に進んで質問に直接ジャンプします。

ここで質問があります。angularJSストアには、ウォッチャーへの参照とそのウォッチャーの現在の値を含む、すべてのスコープ用のある種のキーマップ(またはデータ構造)がありますか??

$scope上記のスコープにアタッチされた現在アクティブなウォッチャー ( ) の内部配列が.$$watchersあり、エントリは次のようになります。

ここに画像の説明を入力

以下の説明は間違っています。修正については私の編集を参照してください

  • eqfnの式が true/falseを保持するかどうかを示すブール値です。
  • exp'squiggles' の間のビューで公開した生の文字列値です{{raw_expr_value}}
  • これは、内部の$interpolate.$$watchDelegateの参照(または、「ウォッチャーへの参照」 ) だと思います。これがマニュアルの場合、への参照になります。fn$scope.$watch('val', _func_)fn_func_
  • get よくわかりません。誰かがこれが何であるかを記入できれば、それは素晴らしいことです.
  • Andlastは、式が評価された最新の値です。

$$そうは言っても、通常は内部変数に触れるべきではありませんが、必要な場合はすぐに行ってください。軽く踏む :)


編集

私は間違っていました。のソースを見ると$watch、プロパティは次のとおりです。

  • fn- ウォッチャーのコールバック関数。
  • last-srcのセットアップの最初に適用される一意$watch値。おそらく、最初に評価する式をトリガーするためです。
  • get- で囲まれた式$parse()
  • exp-今まで聞いたことのないprettyPrintExpression 。ビュー/ハンドラーで監視されている式にフォールバックします。$watch
  • eq- これは私が非常に間違っていたところです。ブール値は、深い監視 (オブジェクトの等価性) を行うか、通常の浅い監視を行うかを決定します。
于 2015-07-23T08:11:18.627 に答える