AngularJS及其使用Dollar Variables

时间:2012-09-28 23:23:49

标签: angularjs

有人知道在angularJS中使用美元方法和变量背后的原因是指示angularJS在消化过程中避免检查这些值吗?因此,如果角度遇到$scope.$value$scope.value,那么它将避免检查前者,因为它的变量名称中带有一个美元字符前缀?

9 个答案:

答案 0 :(得分:112)

这只是以下代码段的命名约定 http://docs.angularjs.org/tutorial/step_05

  

'$'前缀命名惯例
  您可以创建自己的服务   事实上,我们将在第11步中做到这一点。作为命名惯例,   angular的内置服务,Scope方法和其他一些角度   API在名称前面有一个'$'前缀。不要使用'$'前缀   在命名您的服务和模型时,为了避免任何可能   命名冲突。

http://docs.angularjs.org/guide/concepts#angular_namespace

  

Angular命名空间
  为防止意外名称冲突,Angular   前缀可能与$发生冲突的对象的名称。   请不要在代码中使用$前缀,因为它可能会意外   与Angular代码冲突。

答案 1 :(得分:85)

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

  1. 在下面的Schumli's comment中,json过滤器不会输出它们
  2. 使用{{ }}指令时,angular不会显示嵌套 $ 变量。例如,这只显示visible属性。

    <div ng-init="n = { visible: 'foo', $ignore: 'bar' };">{{ n }}</div>
    
  3. 此外,在范围对象上添加显式观察程序时,对具有此对象的前导美元符号的属性的更改将不会触发观察程序。请参阅this updated fiddle

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

答案 2 :(得分:28)

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

源自框架内但实际上不属于API的对象的属性可能以$ - 或甚至$$开头 - 表示私有方法或财产。这与_前缀在其他库中经常使用的方式相同。

它对运行时解释代码的方式没有任何影响,尽管框架本身可能赋予它特殊的含义。基本上,它是一个命名惯例,说&#34;你不应该惹这个&#34;。

答案 3 :(得分:7)

不完全确定,但我相信AngularJS内部依赖于在摘要期间操纵这些$ -prefixed变量。检查这些变量意味着摘要永远不会稳定,因为它们可能在摘要的每个循环期间不断变化。

不要引用我的话。 :)

答案 4 :(得分:5)

Dollar( $ )符号还会阻止元素在某些指令中被迭代(或解释)。 因此,例如ng-repeat中未使用以 $ 开头的属性,因为an if clause in the for loop

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

有人就主题here on angulars github page

提出了问题

在方法shallowCopy中,由于if clause while iterating the properies而跳过了以 $$ 开头的属性:

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

答案 5 :(得分:5)

我总是认为$看起来像服务的“S”。

答案 6 :(得分:3)

答案 7 :(得分:1)

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

在角度指令中有一个链接和控制器。该链接是一个标准函数,具有一组固定的参数:scope,element,attributes object。

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

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

答案 8 :(得分:-1)

存在巨大差异,不是变量,而是控制器接收的参数。范围参数与$ scope范围完全不同。

有关详细信息,请查看此有用的帖子:http://www.thinkster.io/angularjs/aw9kWmdnik/angularjs-scope-vs-scope