以下是我对 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)