angularjs – 什么被添加到$scope.默认情况下,观察者在Angular中?什么触发$摘要?

我正在阅读 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 – >范围).

其他人设置了单向绑定(范围 – >视图).

简单地暴露一些例如控制器的$scope将不会添加观察者.

例如,以下内容不会导致添加观察程序:

angular.module('myApp',[]).controller('Controller',function MyCtrl($scope) {
  $scope.value = 1;
});

和…一起:

<body ng-app="myApp" ng-controller="Controller">
</body>

但是,如果您使用以下内容替换HTML,则会添加一个观察者:

<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.

相关文章

ANGULAR.JS:NG-SELECTANDNG-OPTIONSPS:其实看英文文档比看中...
AngularJS中使用Chart.js制折线图与饼图实例  Chart.js 是...
IE浏览器兼容性后续前言 继续尝试解决IE浏览器兼容性问题,...
Angular实现下拉菜单多选写这篇文章时,引用文章地址如下:h...
在AngularJS应用中集成科大讯飞语音输入功能前言 根据项目...
Angular数据更新不及时问题探讨前言 在修复控制角标正确变...