javascript - AngularJS 如何区分以下 Action ?

标签 javascript angularjs

假设 this.model === $scope.model

以下将触发摘要:

$scope.model.property1.property2 = true; 

但是没有 watch 就不行:

this.model.property1.property2 = true;  

AngularJS 是如何区分这两行代码的?

最佳答案

我会尽力回答目前的问题。这些行中的任何一行都不会导致摘要发生:

$scope.model.property1.property2 = true;
this.model.property1.property2 = true;

这两个都是简单的赋值。摘要由显式调用它的代码触发。这通常通过 $scope.$eval()、$scope.$apply() 和显式 $scope.$digest() 调用发生。例如,一个 ng-click 绑定(bind)到元素的点击事件,并使用附加到该指令的函数调用 $scope.$apply()。

$digest 循环首先执行表达式以在作用域的 asyncQueue 上求值(例如由 $scope.$evalAsync() 填充)。接下来,它遍历范围并评估需要触发哪些监视并调用分配给它们的适当函数(如果它发现更改)。

因此,有几点与您的问题相关:

  • 以上两行都不会触发 $digest
  • Angular 不需要区分这两行代码,因为它们都是对同一属性的简单赋值(假设 this.model === $scope.model 如问题中所述)。即使 this.model 和 $scope.model 不同,它仍然只是简单的赋值,只是指向不同的目的地。
  • 在遍历作用域时观察 $digest 循环中的“触发”。

jsfiddle从高层次上证明了这一点。请注意,没有明确监视 $scope.model.property1.property2 或 this.model.property1.property2。 View 已更新,因为两个分配都发生在单独的 ng-click 中,这会触发 $digest 循环。 View 中的 {{model.property1.property2}} 对此值设置了一个监视,当 $digest 发生时,该值通过每次 ng-click 更新。

如果没有看到实际差异发生的代码示例,我无法说出为什么一个人的行为与另一个人不同。

关于javascript - AngularJS 如何区分以下 Action ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27382686/

相关文章:

javascript - CodeIgniter ajax 上传图片(ajax 有效,而不是 CodeIgniter)

html - Accordion header 中的 href 不起作用

html - Angular : Incorrect Alignment using ng-repeat and ng-include

javascript - Chrome 扩展程序不在文档启动时运行脚本且不打印内容

javascript - href onclick 在某些页面上不起作用

javascript - 通过innerHTML查找元素以从注入(inject)的javascript调用 Angular ng-click

javascript - 来自 promise 的 Angular $http.post 值

javascript - 函数调用之间 Angular 变量不会为 "unset"

javascript - 如何检查平台是否支持 FontFace API?

javascript - 为什么我的 CSS 不适用于我的 React 组件?