AngularJS et son utilisation des variables en dollars

Est-ce que quelqu’un sait si le raisonnement derrière l’utilisation de méthodes et de variables en dollars dans angularJS est de demander à angularJS d’éviter de vérifier ces valeurs lorsqu’une digestion est en cours? Donc, si angular vient avec $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?

Il y a quelques fois, Angular ignore les variables précédées du signe dollar:

  1. Dans le commentaire de Schumli ci-dessous, où les filtres json ne les afficheront pas
  2. Lors de l’utilisation de la directive {{ }} , angular n’affichera pas les variables $ nestedes . Par exemple, cela affiche uniquement la propriété visible .

     
    {{ n }}
  3. En outre, lors de l’ajout d’un observateur explicite sur un object de scope, les modifications apscopes aux propriétés avec un signe de dollar en tête de cet object ne déclencheront pas l’observateur. Voir ce violon mis à jour .

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

C’est juste une convention de nommage de l’extrait ci-dessous http://docs.angularjs.org/tutorial/step_05

Convention de dénomination de préfixe ‘$’
Vous pouvez créer vos propres services et nous le ferons exactement à l’étape 11. En tant que convention de nommage, les services intégrés d’angular, les méthodes Scope et quelques autres API angulars ont un préfixe ‘$’ devant le nom. N’utilisez pas de préfixe ‘$’ pour nommer vos services et modèles afin d’éviter toute collision de noms.

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

Angular Namespace
Pour éviter les collisions de noms accidentelles, préfixes angulars les noms des objects qui pourraient potentiellement entrer en collision avec $. S’il vous plaît ne pas utiliser le préfixe $ dans votre code car il peut accidentellement entrer en collision avec le code angular.

Le préfixe $ indique une variable, un paramètre, une propriété ou une méthode qui appartient au kernel de Angular.

Les propriétés d’objects qui proviennent de la structure, mais qui ne font pas réellement partie de l’API, peuvent commencer par $ – ou même $$ – pour désigner une méthode ou une propriété privée. C’est la même manière que le préfixe _ est souvent utilisé dans d’autres bibliothèques.

Cela n’a aucun effet sur la façon dont le code est interprété par le moteur d’exécution, bien que le framework lui-même puisse lui donner une signification particulière. Fondamentalement, c’est une convention de nommage qui dit “Vous ne devriez pas jouer avec cela”.

Pas tout à fait sûr, mais je pense que les internes d’AngularJS dépendent de la manipulation de ces variables $ -prefixed lors de la digestion. La vérification de ces variables signifierait que la digestion ne se stabiliserait jamais, car elles peuvent changer constamment au cours de chaque cycle du digest.

Ne me citez pas là-dessus. 🙂

J’ai toujours pensé que $ ressemble à un “S” pour le service.

Les signes dollar ( $ ) empêchent également que des éléments soient itérés (ou interprétés) dans certaines directives. Ainsi, par exemple, les propriétés commençant par $ ne sont pas utilisées dans ng-repeat cause d’ une clause if dans la boucle for :

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

Quelqu’un a posé un problème sur le sujet ici sur la page angular github


Dans la méthode, les propriétés shallowCopy qui commencent par $$ sont ignorées en raison d’une clause if lors de l’itération des propriétés :

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

Voir aussi cet article sur la différence entre “$ scope” et “scope” dans angularjs …

@MarcoS a fourni le lien vers https://thinkster.io/a-better-way-to-learn-angularjs/scope-vs-scope, ce qui explique la différence entre la scope et la scope de $. J’ai trouvé cela utile, ajoutant à l’information dans d’autres réponses.

Dans une directive angular, il y a un lien et un contrôleur. Le lien est une fonction standard avec un ensemble fixe de parameters: scope, element, atsortingbuts object.

Les arguments du contrôleur sont gérés par l’injecteur angular et ne dépendent pas de l’ordre. L’injecteur résout les objects à passer en recherchant les parameters commençant par $.

L’auteur de https://thinkster.io/a-better-way-to-learn-angularjs/scope-vs-scope l’ explique mieux.

Il y a une énorme différence, non pas dans les variables, mais dans les parameters qu’un contrôleur reçoit. Un paramètre de scope est complètement différent de celui de $ scope.

Pour plus d’informations, consultez ce post utile: http://www.thinkster.io/angularjs/aw9kWmdnik/angularjs-scope-vs-scope