106 votes

En passant la portée actuelle à un Service de AngularJS

Est-ce correct passer le « courant » `` à un service de AngularJS ?

Je suis dans la situation où j’ai une $service sachant qu'il est consommé par un seul contrôleur, et je voudrais avoir une référence à la portée du contrôleur dans les méthodes $service eux-mêmes.

Il est philosophiquement correct ?

Ou je ferais mieux de diffuser des événements à le $rootScope et ensuite faire mon contrôleur de les écouter ?

67voto

CaioToOn Points 9069

Pour laisser le contrôleur de savoir quand quelque chose async se passe, utilisez Angulaire promesses.

Pour provoquer l' $apply, vous n'avez pas besoin de la portée, vous pouvez appeler $rootScope.$apply, comme il n'y a pas de différence en l'appelant dans un champ d'application spécifique ou dans la racine.

À propos de la variable de lecture, il serait mieux si vous les paramètres reçus. Mais vous pouvez aussi le lire à partir d'un champ comme un paramètre de l'objet, mais je voudrais aller avec le paramètre de faire votre service interface beaucoup plus claire.

15voto

Flek Points 3312

Je dirais que si votre fonctionnalité est spécifique à un seul contrôleur que vous n'avez pas besoin d'un service.

Les contrôleurs de tâches est de manipuler le modèle spécifique, alors qu'un service devrait traiter les tâches globales. Je préfère s'en tenir à ce paradigme, au lieu de mélanger les choses.

C'est ce que les docs disent

Service

Angulaire de services sont des singletons qui effectuent des tâches spécifiques communs aux applications web

Contrôleur

Dans Angulaire, un contrôleur est une fonction JavaScript(type/classe) qui est utilisé pour augmenter les instances angulaire de la Portée, à l'exclusion de la racine de la portée.

PS: en dehors de cela, si vous avez besoin de digérer vous pouvez également injecter $rootScope au sein de votre service.

9voto

wbeange Points 189

Oui. Vous pouvez passer le $scope au service lorsque vous l’initialisez. Dans le constructeur de service, vous pouvez affecter la portée à quelque chose comme ce ._scope et ensuite référencer le champ d’application au sein du service !

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