AngularJS及其使用Dollar Variables

mat*_*sko 127 angularjs

有没有人知道在angularJS中使用美元方法和变量背后的原因是指示angularJS在消化过程中避免检查这些值?所以,如果角度遇到$scope.$value$scope.value,然后它会避免检查前,因为它与它的变量名称美元字符前缀?

ven*_*kat 115

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

'$'前缀命名约定
您可以创建自己的服务,实际上我们将在第11步中完成.作为命名约定,angular的内置服务,Scope方法和一些其他角度API都有'$'前缀在名字前面.在命名服务和模型时,请勿使用'$'前缀,以避免任何可能的命名冲突.

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

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

  • 为什么指令doc [1]在控制器中有`$ scope`,而在指令中有`scope`?--- [1] https://docs.angularjs.org/guide/directive (2认同)
  • @LeeGee这只是惯例.http://stackoverflow.com/a/19289054/114558 (2认同)

Roy*_*ove 87

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

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

    <div ng-init="n = { visible: 'foo', $ignore: 'bar' };">{{ n }}</div>
    
    Run Code Online (Sandbox Code Playgroud)
  3. 此外,在范围对象上添加显式观察程序时,对具有此对象的前导美元符号的属性的更改将不会触发观察程序.看到这个更新的小提琴.

  4. angular.equals() 忽略带有前缀的键$.

  • Angular的某些部分确实忽略了前缀属性,例如'json'过滤器不会输出以'$'开头的变量. (7认同)

dal*_*ard 29

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

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

它对运行时解释代码的方式没有任何影响,尽管框架本身可能赋予它特殊的含义.基本上,这是一个命名惯例,上面写着"你不应该把这个搞得一团糟".


btf*_*ord 7

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

不要引用我的话.:)

  • 因为以下原因而被低估:"不要引用我的话".对不起,但承认不确定性的答案不是很有用:( (9认同)
  • Downvote转换为up-.假设你是对的,现在这是一个有用的答案! (2认同)
  • @DavidRivers,如果答案最初犹豫不决,重新措辞不会使它更有用。事实上,答案可能是_错误的_,缺乏犹豫就会_断言潜在的错误_。相反,为了让这个答案被认为有用,它应该通过引用 _trusted_ 来源提供一些证据来支持,或者提供一个小提琴来重现表达的观点。 (2认同)

Wil*_*ilt 5

美元($)符号还可以防止元素在某些指令中被迭代(或解释).因此,例如因为for循环的if子句而未使用以$开头的属性: ng-repeat

if(collection.hasOwnProperty(key) && key.charAt(0) != '$')
Run Code Online (Sandbox Code Playgroud)

有人在angulars github页面上就这个话题提出了一个问题


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

if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) {
Run Code Online (Sandbox Code Playgroud)


Mar*_* M. 5

我总觉得$看起来像服务的"S".

  • $scope 是服务吗? (3认同)