Si j'ai une fonction utilitaire foo
que je veux pouvoir appeler de n'importe où à l'intérieur de ma ng-app
déclaration. Est-il possible de le rendre globalement accessible dans la configuration de mon module ou dois-je l'ajouter à l'oscilloscope dans chaque contrôleur?
191
module.value('myFunc', function(a){return a;});
puis l'injecter par son nom dans vos contrôleurs. (Si l'on veut éviter de faire un service)Réponses:
Vous avez essentiellement deux options, soit le définir en tant que service, soit le placer sur votre étendue racine. Je vous suggère d'en faire un service pour éviter de polluer la portée racine. Vous créez un service et le rendez disponible dans votre contrôleur comme ceci:
Si ce n'est pas une option pour vous, vous pouvez l'ajouter à la portée racine comme ceci:
De cette façon, tous vos modèles peuvent appeler
globalFoo()
sans avoir à le transmettre au modèle à partir du contrôleur.la source
foo()
fonctions? Faire un$scope.callFoo()
emballage pour chacun d'eux est trop de travail. Comment puis-je "attacher" toutes les fonctions d'une bibliothèque dans la portée afin qu'elle puisse être utilisée dans le modèle? J'ai une grande bibliothèque de conversion d'unités que je souhaite qu'elle soit disponible sur mon modèle.$scope.callFoo = myService.foo;
au lieu de créer un nouveau wrapper à chaque endroit où vous voulez l'utiliser.Vous pouvez également les combiner je suppose:
la source
$rootScope
?Bien que la première approche soit préconisée comme l'approche «angulaire», je pense que cela ajoute des frais généraux.
Considérez si je veux utiliser cette fonction myservice.foo dans 10 contrôleurs différents. Je devrai spécifier cette dépendance 'myService', puis la propriété de portée $ scope.callFoo dans les dix. Ceci est simplement une répétition et viole en quelque sorte le principe DRY.
Alors que si j'utilise l'approche $ rootScope, je ne spécifie cette fonction globale gobalFoo qu'une seule fois et elle sera disponible dans tous mes futurs contrôleurs, quel qu'en soit le nombre.
la source
AngularJs a des " Services " et des " Usines " juste pour des problèmes comme le vôtre. Ceux-ci sont utilisés pour avoir quelque chose de global entre les contrôleurs, les directives, les autres services ou tout autre composant angularjs. Vous pouvez définir des fonctions, stocker des données, faire calculer des fonctions ou tout ce que vous veulent des services internes et les utiliser dans les composants AngularJs en tant que Global .like
si vous avez besoin de plus
En savoir plus sur les raisons pour lesquelles nous avons besoin des services et des usines AngularJs
la source
Je suis un peu plus récent dans Angular mais ce que j'ai trouvé utile (et assez simple), c'est que j'ai créé un script global que je charge sur ma page avant le script local avec des variables globales auxquelles je dois accéder de toute façon sur toutes les pages. Dans ce script, j'ai créé un objet appelé "globalFunctions" et ajouté les fonctions auxquelles j'ai besoin d'accéder globalement en tant que propriétés. par exemple
globalFunctions.foo = myFunc();
. Ensuite, dans chaque script local, j'ai écrit$scope.globalFunctions = globalFunctions;
et j'ai instantanément accès à toute fonction que j'ai ajoutée à l'objet globalFunctions dans le script global.C'est un peu une solution de contournement et je ne suis pas sûr que cela vous aide, mais cela m'a vraiment aidé car j'avais de nombreuses fonctions et c'était difficile de les ajouter toutes à chaque page.
la source