如何解决在Angular中,$ scope$$ watchers默认添加了什么?什么触发$摘要?
一些常见的指令,使使用$watch
/ $watchCollection
/ $watchGroup
内部:
- ng模型
- ng-bind / {{}}
- ng-show和ng-hide
- ng级
- ng-repeat
- ng-if
- ng-开关
- 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
?的字段 其他?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。