AngularJS y su uso de Dollar Variables

¿Alguien sabe si el razonamiento detrás del uso de métodos y variables en dólares en angularJS es instruir a angularJS para que evite verificar esos valores cuando se está llevando a cabo una digestión? Entonces, si angular llega a $scope.$value $scope.value y $scope.value , entonces evitará verificar el primero ya que está prefijado con un carácter de dólar en su nombre de variable.

Hay algunas veces que Angular ignora las variables con el prefijo del signo de dólar:

  1. En el comentario de Schumli a continuación, donde los filtros json no les darán salida
  2. Al usar la directiva {{ }} , angular no mostrará las variables $ anidadas . Por ejemplo, esto solo muestra la propiedad visible .

     
    {{ n }}
  3. Además, al agregar un observador explícito en un objeto de ámbito, los cambios en las propiedades con un signo de dólar adelantado de este objeto no activarán el observador. Vea este violín actualizado .

  4. angular.equals() ignora las claves con el prefijo $ .

Es solo una convención de nomenclatura del siguiente fragmento http://docs.angularjs.org/tutorial/step_05

‘$’ Convenio de nomenclatura de prefijo
Puede crear sus propios servicios y, de hecho, haremos exactamente eso en el paso 11. Como convención de nomenclatura, los servicios incorporados de angular, los métodos Scope y algunas otras API angulares tienen un prefijo ‘$’ delante del nombre. No use un prefijo ‘$’ al nombrar sus servicios y modelos, para evitar posibles colisiones de nombres.

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

Espacio de nombre angular
Para evitar colisiones accidentales de nombres, Angular prefija los nombres de los objetos que podrían colisionar con $. Por favor, no use el prefijo $ en su código ya que puede colisionar accidentalmente con el código angular.

El prefijo $ denota una variable, parámetro, propiedad o método que pertenece al núcleo de Angular.

Las propiedades en los objetos que se originan dentro del marco, pero que en realidad no son parte de la API, pueden comenzar con $ – o incluso $$ – para denotar un método o propiedad privada . Esta es la misma forma en que el prefijo _ se usa a menudo en otras bibliotecas.

No tiene ningún efecto sobre la forma en que el tiempo de ejecución interpreta el código, aunque el marco mismo puede darle un significado especial. Básicamente, es una convención de nombres que dice “No deberías meterse con esto”.

No estoy del todo seguro, pero creo que los internos de AngularJS dependen de la manipulación de estas variables prefijadas en $ durante el resumen. Controlar estas variables significaría que el resumen nunca se estabilizaría, ya que pueden cambiar constantemente durante cada ciclo del resumen.

No me cites en eso sin embargo. 🙂

Siempre pensé que $ ve como una “S” por el servicio.

Los signos de dólar ( $ ) también evitan que los elementos sean repetidos (o interpretados) en ciertas directivas. Entonces, por ejemplo, las propiedades que comienzan con $ no se utilizan en ng-repeat debido a una cláusula if en el ciclo for :

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

Alguien hizo un problema sobre el tema aquí en la página de angulos github


En el método, shallowCopy propiedades de shallowCopy que comienzan con $$ se saltan debido a una cláusula if al iterar las propiedades :

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

Ver también esta publicación en el blog, sobre la diferencia de “$ scope” y “scope” en angularjs …

@MarcoS proporcionó el enlace a https://thinkster.io/a-better-way-to-learn-angularjs/scope-vs-scope que explica la diferencia entre $ scope y scope. Lo encontré útil, agregando información en otras respuestas.

En una directiva angular hay un enlace y un controlador. El enlace es una función estándar con un conjunto fijo de parámetros: scope, elemento, atributos, objeto.

Los argumentos del controlador son gestionados por el inyector angular y no dependen de los pedidos. El inyector resuelve qué objetos pasar al buscar los parámetros que comienzan con $.

El autor de https://thinkster.io/a-better-way-to-learn-angularjs/scope-vs-scope hace un mejor trabajo al explicarlo.

Hay una gran diferencia, no en las variables, sino en los parámetros que recibe un controlador. Un parámetro de ámbito es completamente diferente de un $ scope one.

Para obtener más información, consulte esta publicación útil: http://www.thinkster.io/angularjs/aw9kWmdnik/angularjs-scope-vs-scope