angular 绑定是如何发生的?
How does angular binding happen?
以下是我对 angularJS 中绑定如何发生的理解。如果高手能提供一下就好了feedback/comment..
<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}}),就会在内部创建一个观察者(针对每个变量)。这个观察者是为 $scope of controller 'ctrlA'.
创建的
只要在 $timeout、ng-click 等时间内调用函数,它们就会嵌入到 $scope.apply() 中。在你的函数执行后(这可能会改变一些作用域变量),$apply 将在 rootScope 上调用 digest。这将在整个应用程序中使用 UI!
同步变量
当调用 $scope.digest 时,它会遍历该作用域的所有观察者。然后它获取变量的当前值并检查它是否发生了变化。如果它发生变化,它会调用观察者处理程序(它会更改 html 以反映新值!)。
我这里有一个问题。 angularJS store 是否为每个范围都有某种键映射(或某种数据结构),其中包含对观察者的引用和该观察者的当前值?类似于:
watch ref (for myvar) -> current value (of myvar)
watch ref (for anothervar) -> current value (of anothervar)
您对 Angular 如何为每个绑定设置观察者的理解 相当 是对的。我将继续并直接跳到 问题 ,而不是 debunking/discussing 你对 Angular 绑定的内部工作原理的看法。
I have a question here. Does angularJS store have some kind of key-map (or some data structure) for every scope, which contains the reference to watcher and the current value for that watcher??
$scope
有一个当前活跃观察者的内部数组 (.$$watchers
) 附加到所述范围,其中条目如下所示:
下面的解释错误。请参阅我的更正编辑
eq
是一个布尔值,指示 fn
中的表达式是否成立
true/false.
exp
是您在 'squiggles' {{raw_expr_value}}
之间的视图中公开的原始字符串值。
- 我相信
fn
是对内部 $interpolate.$$watchDelegate 的引用(或者如您所说,"a reference to the watcher")。如果这是一本手册 $scope.$watch('val', _func_)
,fn
将是对 _func_
. 的引用
get
我不太确定。如果有人能补充一下这是什么,那就太棒了。
- 而
last
是表达式求得的最新值。
综上所述,通常您不应该接触内部 $$
变量,但如果您必须接触,请继续。 轻装上阵:)
编辑
我错了。查看$watch
的source,属性如下:
fn
- 监听器的回调函数。
last
- src 在 $watch
设置的最开始应用的 唯一 值。可能是为了触发表达式进行初始评估。
get
- 用 $parse()
包裹的表达式。
exp
- prettyPrintExpression 这是我以前从未 听说过的。回退到您视图中的监视表达式 / $watch
处理程序。
eq
- 这就是我所在的位置 哦,大错特错。布尔值指示我们是在进行深度监视(对象相等)还是常规的浅层监视。
以下是我对 angularJS 中绑定如何发生的理解。如果高手能提供一下就好了feedback/comment..
<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}}),就会在内部创建一个观察者(针对每个变量)。这个观察者是为 $scope of controller 'ctrlA'.
创建的只要在 $timeout、ng-click 等时间内调用函数,它们就会嵌入到 $scope.apply() 中。在你的函数执行后(这可能会改变一些作用域变量),$apply 将在 rootScope 上调用 digest。这将在整个应用程序中使用 UI!
同步变量当调用 $scope.digest 时,它会遍历该作用域的所有观察者。然后它获取变量的当前值并检查它是否发生了变化。如果它发生变化,它会调用观察者处理程序(它会更改 html 以反映新值!)。
我这里有一个问题。 angularJS store 是否为每个范围都有某种键映射(或某种数据结构),其中包含对观察者的引用和该观察者的当前值?类似于:
watch ref (for myvar) -> current value (of myvar)
watch ref (for anothervar) -> current value (of anothervar)
您对 Angular 如何为每个绑定设置观察者的理解 相当 是对的。我将继续并直接跳到 问题 ,而不是 debunking/discussing 你对 Angular 绑定的内部工作原理的看法。
I have a question here. Does angularJS store have some kind of key-map (or some data structure) for every scope, which contains the reference to watcher and the current value for that watcher??
$scope
有一个当前活跃观察者的内部数组 (.$$watchers
) 附加到所述范围,其中条目如下所示:
下面的解释错误。请参阅我的更正编辑
eq
是一个布尔值,指示fn
中的表达式是否成立 true/false.exp
是您在 'squiggles'{{raw_expr_value}}
之间的视图中公开的原始字符串值。- 我相信
fn
是对内部 $interpolate.$$watchDelegate 的引用(或者如您所说,"a reference to the watcher")。如果这是一本手册$scope.$watch('val', _func_)
,fn
将是对_func_
. 的引用
get
我不太确定。如果有人能补充一下这是什么,那就太棒了。- 而
last
是表达式求得的最新值。
综上所述,通常您不应该接触内部 $$
变量,但如果您必须接触,请继续。 轻装上阵:)
编辑
我错了。查看$watch
的source,属性如下:
fn
- 监听器的回调函数。last
- src 在$watch
设置的最开始应用的 唯一 值。可能是为了触发表达式进行初始评估。get
- 用$parse()
包裹的表达式。exp
- prettyPrintExpression 这是我以前从未 听说过的。回退到您视图中的监视表达式 /$watch
处理程序。eq
- 这就是我所在的位置 哦,大错特错。布尔值指示我们是在进行深度监视(对象相等)还是常规的浅层监视。