有谁知道在 angularJS 中使用美元方法和变量的原因是否是为了指示 angularJS 在消化过程中避免检查这些值?那么,如果 angular 遇到$scope.$value
and $scope.value
,那么它将避免检查前者,因为它的变量名中以美元字符为前缀?
8 回答
这只是来自以下代码段 http://docs.angularjs.org/tutorial/step_05的命名约定
'$' 前缀命名约定
您可以创建自己的服务,实际上我们将在第 11 步中做到这一点。作为命名约定,Angular 的内置服务、Scope 方法和一些其他 Angular API 具有“$”前缀在名字前面。命名服务和模型时不要使用“$”前缀,以避免任何可能的命名冲突。
http://docs.angularjs.org/guide/concepts#angular_namespace
Angular 命名空间
为了防止意外的名称冲突,Angular 会为可能与 $ 冲突的对象的名称添加前缀。请不要在代码中使用 $ 前缀,因为它可能会意外地与 Angular 代码发生冲突。
有几次 Angular 会忽略以美元符号为前缀的变量:
- 在下面Schumli 的评论中,json 过滤器不会输出它们
使用
{{ }}
指令时,angular 不会显示嵌套$
变量。例如,这仅显示visible
属性。<div ng-init="n = { visible: 'foo', $ignore: 'bar' };">{{ n }}</div>
此外,当在作用域对象上添加显式观察者时,对该对象带有前导美元符号的属性的更改不会触发观察者。看到这个更新的小提琴。
angular.equals()
忽略以 . 为前缀的键$
。
$
前缀表示属于 Angular 核心的变量、参数、属性或方法。
源自框架内部但实际上不是 API 的一部分的对象的属性可能以$
- 甚至$$
- 开头,以表示私有方法或属性。这与_
其他库中经常使用前缀的方式相同。
它对运行时解释代码的方式没有任何影响,尽管框架本身可能赋予它特殊的含义。基本上,这是一个命名约定,上面写着“你不应该乱用这个”。
不完全确定,但我相信 AngularJS 内部依赖于在摘要期间操纵这些以 $ 为前缀的变量。检查这些变量意味着摘要永远不会稳定,因为它们可能在摘要的每个循环中不断变化。
不过不要引用我的话。:)
美元 ( $ ) 符号还可以防止元素在某些指令中被迭代(或解释)。因此,例如,由于for 循环中的 if 子句,不使用以$开头的属性: ng-repeat
if(collection.hasOwnProperty(key) && key.charAt(0) != '$')
有人在 angulars github 页面上提出了有关该主题的问题
在以$$shallowCopy
开头的方法属性中,由于if 子句在迭代属性时被跳过:
if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) {
我一直认为$
服务看起来像一个“S”。
@MarcoS 提供了指向https://thinkster.io/a-better-way-to-learn-angularjs/scope-vs-scope的链接,它解释了 $scope 和 scope 之间的区别。我发现这很有用,添加到其他答案中的信息。
在角度指令中有一个链接和控制器。链接是具有一组固定参数的标准函数:范围、元素、属性对象。
控制器的参数由 Angular 注入器管理,不依赖于顺序。注入器通过查找以 $ 开头的参数来解析要传入的对象。
https://thinkster.io/a-better-way-to-learn-angularjs/scope-vs-scope的作者在解释上做得更好。
有很大的不同,不是在变量上,而是在控制器接收的参数上。范围参数与 $scope 参数完全不同。
有关更多信息,请查看这篇有用的帖子:http ://www.thinkster.io/angularjs/aw9kWmdnik/angularjs-scope-vs-scope