gpt4 book ai didi

javascript - AngularJS 如何区分以下 Action ?

转载 作者:行者123 更新时间:2023-11-29 15:36:50 26 4
gpt4 key购买 nike

假设 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com