以下は、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)