Ada*_*ner 0 data-binding angularjs angularjs-scope
我读自创AngularJS和具有怎样的一个体面的理解$scopes,$watch和$digest工作.我了解当你添加自己的$watches并且打电话给自己时它是如何工作的$digests.但是,我对于默认情况下究竟发生了什么感到困惑.
$scope.$$watchers默认添加什么?你穿的一切$scope?你指定的所有东西ng-model?都?别的什么?
什么时候确实$digests被默认触发?输入字段更改?输入字段用ng-models?其他?
一些在内部使用$watch/ $watchCollection/ 的通用指令$watchGroup:
请注意,唯一设置双向绑定的是ng-model(范围 - >视图和视图 - >范围).
其他人设置了单向绑定(范围 - >视图).
简单地暴露一些例如控制器的东西$scope将不会添加观察者.
例如,以下内容不会导致添加观察程序:
angular.module('myApp', []).controller('Controller', function MyCtrl($scope) {
$scope.value = 1;
});
Run Code Online (Sandbox Code Playgroud)
和...一起:
<body ng-app="myApp" ng-controller="Controller">
</body>
Run Code Online (Sandbox Code Playgroud)
但是,如果您使用以下内容替换HTML,则会添加一个观察者:
<body ng-app="myApp" ng-controller="Controller">
<div>{{value}}</div>
</body>
Run Code Online (Sandbox Code Playgroud)
触发摘要周期时的一些常见情况:
ng-click评估ng-model的变化(例如在输入打字时)$http服务$timeout和$interval请注意,$apply和之间有一个很大的区别$digest:
调用scope.$digest()将仅在该范围及其子项上执行观察者.
调用scope.$apply()将触发$digest的$rootScope,这意味着所有范围将遍历所有观察家执行.
$apply也接受表达式作为参数.此表达式将在try-catch语句中进行计算,并且任何异常都将传递给$exceptionHandler服务.
$digest 不接受任何论点.
通常你只是打电话$digest而不是$apply当你追逐微优化并真正知道你在做什么.
| 归档时间: |
|
| 查看次数: |
1955 次 |
| 最近记录: |