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

前端之家收集整理的这篇文章主要介绍了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.

原文链接:https://www.f2er.com/angularjs/143220.html

猜你在找的Angularjs相关文章