AngularJS 及其对美元变量的使用

有人知道在 angularJS 中使用美元方法和变量背后的原因是否是为了指导 angularJS 在进行消解时避免检查这些值?因此,如果 angle 遇到 $scope.$value$scope.value,那么它将避免检查前者,因为它的变量名前缀是一个美元字符?

68801 次浏览

有几次 Angular 忽略了以美元符号为前缀的变量:

  1. 在下面的 Schumli 的评论中,json 过滤器不会输出它们
  2. 当使用 \{\{ }}指令,角度将不显示 嵌套的 $ 例如,这只显示 visible属性。

    <div ng-init="n = { visible: 'foo', $ignore: 'bar' };">\{\{ n }}</div>
    
  3. Additionally when adding an explicit watcher on a scope object, changes to properties with a leading dollar sign of this object will not trigger the watcher. See this updated fiddle.

  4. angular.equals() ignores keys prefixed with $.

不完全确定,但我相信 AngularJS 内部依赖于在摘要过程中操纵这些带 $前缀的变量。检查这些变量将意味着摘要永远不会稳定,因为它们可能在摘要的每个周期中不断变化。

不过别引用我的话:)

美元($)标志还防止在某些指令中迭代(或解释)元素。 例如,由于 For 循环中的 if 子句的原因,以 $开头的属性在 ng-repeat中没有使用:

if(collection.hasOwnProperty(key) && key.charAt(0) != '$')

有人就 这里是 Angulars github 页面这个话题发表了一篇文章


在方法 shallowCopy中,由于 迭代属性的 if 子句,以 $$开头的属性被跳过:

if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) {

这里有一个巨大的差异,不是在变量,而是在控制器接收到的参数。Scope 参数与 $scope 参数完全不同。

要了解更多信息,请查看这篇有用的文章: http://www.thinkster.io/angularjs/aw9kWmdnik/angularjs-scope-vs-scope

$前缀表示属于 Angular 核心的变量、参数、属性或方法。

起源于框架内部但实际上不是 API 一部分的对象的属性可以以 $开头——甚至以 $$开头——来表示 二等兵方法或属性。这与 _前缀在其他库中的使用方式相同。

它对运行时解释代码的方式没有任何影响,尽管框架本身可能赋予它特殊的含义。基本上,这是一个变数命名原则,上面写着“你不应该乱搞这个”。

我一直觉得 $看起来像是 S 代表服务。

@ MarcoS 提供了到 https://thinkster.io/a-better-way-to-learn-angularjs/scope-vs-scope的链接,解释了 $scope 和 scope 之间的区别。我发现这很有用,增加了其他答案中的信息。

在角度指令中有一个链路和控制器。该链接是一个标准函数,具有一组固定的参数: 作用域、元素、属性对象。

控制器的参数由角注入器管理,并且不依赖于顺序。注入器通过查找以 $开头的参数来解析要传入的对象。

https://thinkster.io/a-better-way-to-learn-angularjs/scope-vs-scope的作者在解释它方面做得更好。