127 votes

AngularJS et son utilisation des variables Dollar

Quelqu'un sait-il si le raisonnement derrière l'utilisation des méthodes et des variables dollar dans angularJS est d'indiquer à angularJS d'éviter de vérifier ces valeurs lorsqu'une digestion est en cours ? Ainsi, si angular tombe sur $scope.$value et $scope.value alors il évitera de vérifier le premier puisqu'il est préfixé par un caractère dollar dans son nom de variable ?

115voto

venkat Points 801

Il s'agit simplement d'une convention de dénomination de l'extrait ci-dessous. http://docs.angularjs.org/tutorial/step_05

Convention d'appellation du préfixe "$".
Vous pouvez créer vos propres services, et en en fait, c'est exactement ce que nous allons faire à l'étape 11. Comme convention de nommage, les services intégrés d'angular, les méthodes Scope et quelques autres API angulaires ont un préfixe '$' devant leur nom. N'utilisez pas le préfixe '$' pour nommer vos services et modèles. lorsque vous nommez vos services et vos modèles, afin d'éviter tout risque d'échec de l'application collisions de noms.

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

Espace de nom Angular
Pour éviter toute collision accidentelle de noms, Angular préfixe les noms des objets qui pourraient potentiellement entrer en collision par $. Veuillez ne pas utiliser le préfixe $ dans votre code car il pourrait accidentellement collision avec le code Angular.

87voto

Roy Truelove Points 6532

Il y a quelques fois où Angular ignore les variables préfixées par le signe dollar :

  1. Sur Commentaire de Schumli ci-dessous, où les filtres json ne les afficheront pas.

  2. Lorsque vous utilisez le {{ }} angular n'affichera pas emboîté $ variables. Par exemple, ceci n'affiche que la visible propriété.

    <div ng-init="n = { visible: 'foo', $ignore: 'bar' };">{{ n }}</div>
  3. De plus, lors de l'ajout d'un observateur explicite sur un objet d'étendue, les changements de propriétés avec un signe de dollar en tête de cet objet ne déclencheront pas l'observateur. Voir ce violon mis à jour .

  4. angular.equals() ignore les clés préfixées par $ .

29voto

dalgard Points 570

Le site $ désigne une variable, un paramètre, une propriété ou une méthode qui appartient au noyau d'Angular.

Les propriétés des objets qui proviennent du cadre, mais qui ne font pas partie de l'API, peuvent débuter par $ - ou même $$ - pour désigner un privé méthode ou propriété. C'est de la même manière que le _ est souvent utilisé dans d'autres bibliothèques.

Cela n'a aucune implication pratique sur la façon dont le code est interprété par le runtime, il s'agit simplement d'une convention de dénomination qui dit "Vous ne devriez pas jouer avec ça".

7voto

btford Points 4373

Je ne suis pas tout à fait sûr, mais je crois que les internes d'AngularJS s'appuient sur la manipulation de ces variables préfixées par $ pendant le digest. Vérifier ces variables signifierait que le digest ne se stabiliserait jamais, puisqu'elles peuvent constamment changer pendant chaque cycle du digest.

Mais ne me cite pas. :)

5voto

Wilt Points 867

Dollar ( $ ) empêchent également les éléments d'être itérés (ou interprétés) dans certaines directives. Ainsi, par exemple, les propriétés qui commencent par $ ne sont pas utilisés dans ng-repeat à cause d'une clause if dans la boucle for :

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

Quelqu'un a fait un problème sur le sujet ici sur la page github d'angulars

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X