$ RootScope vs. service – JS angulaire

Quelle est la différence entre la mise en œuvre d'une fonction $ rootScope et d'un service? Sûreté ou performances judicieuses.

J'ai lu cela , alors je me demande.

J'ai essayé de déterminer si oui ou non une fonction globale de mon application serait mieux implémentée dans un service ou sur $ rootScope elle-même. Pour tendre les gars avec une idée de ce que je fais, je développe actuellement une fonction de forme sale dans laquelle il invite l'utilisateur s'il se déplace loin d'une certaine forme. Dans ce cas, j'ai décidé de le mettre en œuvre comme une fonction globale, donc des conseils?

Merci pour les réponses,

Jan

Dans ce cas, je voudrais un service pour éviter d'avoir un état global. Toutes les nouvelles étendues sont créées à partir de $ rootScope. Les nouveaux contrôleurs ou ceux qui utilisent une portée auront des valeurs de $rootscope disponibles. Par exemple, si vous définissez $rootScope.validate() et dans un contrôleur, vous définissez une fonction $scope.validate() car vous oubliez la première définition, tout ira bien.

Il y a un article de Misko H. à propos de ce http://misko.hevery.com/code-reviewers-guide/flaw-brittle-global-state-singletons/

Les services sont instanciés sur demande, tandis que $ rootScope est créé pendant le démarrage et peut être injecté partout où vous en avez besoin. Ceci est bon pour la stabilité.

Angular n'entourera pas les services, à moins qu'ils ne soient demandés directement ou indirectement par la demande.

( http://docs.angularjs.org/guide/dev_guide.services.creating_services )

Comme @egamonal mentionné Services sont plus robustes pour partager des fonctionnalités communes. Non seulement les services sont instanciés sur demande, mais ils sont célibataires par nature, donc une fois qu'un service est créé, la même instance est transmise par AngularJS chaque fois que cela est demandé. Donc, si quelque chose peut aller sur la portée de la racine, il peut également être implémenté à l'aide d'un service.

On pense à garder à l'esprit en utilisant une telle approche globale est la possibilité de fuite de mémoire. L'instance des classes JS ou peut-être que les éléments DOM restent dans la mémoire parce que vous les avez référencés à partir de vos fonctions globales (soit en $ rootcope ou service).