有人知道在angularJS中使用美元方法和变量背后的原因是指示angularJS在消化过程中避免检查这些值吗?因此,如果角度遇到$scope.$value
和$scope.value
,那么它将避免检查前者,因为它的变量名称中带有一个美元字符前缀?
答案 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会忽略以美元符号为前缀的变量:
使用{{ }}
指令时,angular不会显示嵌套 $
变量。例如,这只显示visible
属性。
<div ng-init="n = { visible: 'foo', $ignore: 'bar' };">{{ n }}</div>
此外,在范围对象上添加显式观察程序时,对具有此对象的前导美元符号的属性的更改将不会触发观察程序。请参阅this updated fiddle。
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)
另请参阅此博文,difference of "$scope" and "scope" in angularjs ...
答案 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