当前位置: 首页 > 面试题库 >

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

江文斌
2023-03-14
问题内容

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

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

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


问题答案:

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

  1. ng模型
  2. ng-bind / {{}}
  3. ng-show和ng-hide
  4. ng级
  5. ng-repeat
  6. ng-if
  7. ng-开关
  8. 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>

触发摘要循环时的一些常见方案:

  1. 何时ng-click评估
  2. ng-model的变化(例如在输入打字时)
  3. 通过$http服务
  4. $timeout$interval

请注意,$apply和之间有一个很大的区别$digest

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

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

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

$digest 不接受任何参数。

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



 类似资料:
  • 我正在尝试构建一个非循环树结构,每个节点由字符串标识,每个分支节点的类型为PrimMap。同一代上的所有节点都保存为映射中的Item对象。这是缩写代码: 错误消息是:/src/PrimMap。h: 314:57:错误:将“const PrimMap”作为“PrimMap::error PrimMap::add(const string)”的“this”参数传递 我看不出这个错误消息有什么意义——特

  • 问题内容: 它的用途是什么? 问题答案: 它将语句定界符从更改为。这样一来,您就可以在触发器定义中编写代码,而无需MySQL客户端将其误解为已完成操作。 请注意,改回来时是,而不是我见过的人们尝试做的。

  • 问题内容: 我当时在考虑在我的Jenkins构建工作中使用Groovy脚本,因为我有一些条件要检查,可能需要访问Jenkins API。 是否有可能从Groovy脚本中找出触发构建的人员或原因?SCM更改,另一个项目或用户。我刚刚开始阅读有关Groovy和Jenkins API的文章。 我想检查以下条件并相应地构建。一些伪代码: 该项目应建立在每一个SCM更改的基础上,但是只有在版本增加的情况下才

  • 我在考虑在Jenkins中使用Groovy脚本进行构建工作,因为我有一些条件需要检查是否需要访问JenkinsAPI。 是否有可能从Groovy脚本中找出谁或什么触发了构建?SCM更改、另一个项目或用户。我刚刚开始阅读一些关于Groovy和JenkinsAPI的内容。 我想检查以下条件并相应地构建。一些伪代码: 项目应基于每个SCM更改,但仅在版本增加时标记和发布。当一个构建被另一个项目触发时,它

  • 我正在使用JAXP XSLT API(javax.xml.transform)来转换xml文件。 TransformerFactory的javadoc表示:它使用以下有序查找过程来确定要加载的TransformerFactory实现类: 使用javax。xml。使改变TransformerFactory系统属性 使用JRE目录中的属性文件“lib/jaxp.properties”。此配置文件采用标

  • 问题内容: 我经常使用时髦的东西作为字典的键,因此,我想知道什么是正确的方法-这是通过为对象实现良好的哈希方法实现的。我知道这里提出的其他问题[是实现 hash的好方法,但我想了解默认值如何用于自定义对象,以及是否有可能依赖它。 我注意到可变项显然是不可哈希的,因为会引发错误……但是奇怪的是,自定义类是可哈希的: 那么,有人知道此默认哈希函数如何工作吗?通过了解这一点,我想知道: 如果我放置与字典