我正在阅读
Build Your Own AngularJS并且对$scopes,$watch和$digest的工作方式有了一个很好的理解.我了解当你添加自己的$watch并调用你自己的$摘要时它是如何工作的.但是,我对于默认情况下究竟发生了什么感到困惑.
>什么被添加到$scope.默认值为$$观察者?你放在$scope的所有东西?你指定ng模型的所有东西?都?别的什么?
>确切地说,默认情况下会触发$摘要吗?输入字段更改?使用ng-models输入字段?其他?
一些在内部使用$watch / $watchCollection / $watchGroup的通用指令:
> ng-model
> ng-bind / {{}}
> ng-show& NG-隐藏
> ng级
> ng-repeat
> ng-if
> ng-switch
> ng-include
请注意,唯一设置双向绑定的是ng-model(范围 – > view& view – >范围).
其他人设置了单向绑定(范围 – >视图).
angular.module('myApp',[]).controller('Controller',function MyCtrl($scope) { $scope.value = 1; });
和…一起:
<body ng-app="myApp" ng-controller="Controller"> </body>
<body ng-app="myApp" ng-controller="Controller"> <div>{{value}}</div> </body>
触发摘要周期时的一些常见情况:
>评估ng-click时
> ng-model更改时(例如输入输入时)
>通过$http服务
> $timeout和$interval
请注意,$apply和$digest之间有一个很大的区别:
调用范围.$digest()将仅在该范围及其子节点上执行观察者.
调用范围.$apply()将在$rootScope上触发$digest,这意味着将遍历所有范围并执行所有观察者.
$apply还接受表达式作为参数.此表达式将在try-catch语句中进行计算,任何异常都将传递给$exceptionHandler服务.
$digest不接受任何参数.
通常,当您追逐微优化并真正知道自己在做什么时,您只需要调用$digest而不是$apply.