在Angular中,$ scope$$ watchers默认添加了什么?什么触发$摘要?

【字号: 日期:2024-04-11浏览:35作者:雯心
(adsbygoogle = window.adsbygoogle || []).push({}); 如何解决在Angular中,$ scope$$ watchers默认添加了什么?什么触发$摘要??

一些常见的指令,使使用$watch/ $watchCollection/ $watchGroup内部:

ng模型ng-bind / {{}}ng-show和ng-hideng级ng-repeatng-ifng-开关 ng-include

请注意,设置双向绑定的唯一方法是ng-model(作用域->视图和视图->范围)。

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

简单地暴露在例如控制器的东西$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:

调用scope.$digest()将仅在该作用域及其子级上执行监视程序。

调用scope.$apply()将$digest在上触发$rootScope,这意味着将遍历所有作用域并执行所有观察程序。

$apply也接受一个表达式作为参数。该表达式将在try-catch语句中求值,任何异常都将传递给$exceptionHandler服务。

$digest 不接受任何参数。

通常,您只打电话$digest而不是$apply在追求微优化时才真正知道您在做什么。

解决方法

我正在阅读《构建自己的AngularJS》$scopes,$watch并对操作方式和$digest工作方式有一个不错的了解。当您添加自己的$watches并调用自己的时,我了解它的工作原理$digests。但是,我对默认情况下 到底发生 了 什么感到困惑。

$scope.$$watchers默认情况下会添加什么?你穿的一切$scope?您分配给的所有内容ng-model?都?还有吗

以及$digests默认情况下何时确切触发?输入字段更改?输入带有ng-models?的字段 其他?

相关文章: