Puis-je faire une fonction disponible dans chaque contrôleur angulaire?
Si j'ai une fonction d'utilité foo
que je veux être en mesure d'appeler à partir de n'importe où à l'intérieur de mon ng-app
déclaration. Est-il d'une certaine manière je peux la rendre accessible dans le monde entier dans ma configuration de module ou dois-je l'ajouter à la portée de tous les contrôleurs?
- Je ne suis pas 100% sûr à ce sujet, mais il ya une chance que vous pouvez également définir sur votre module comme ceci:
module.value('myFunc', function(a){return a;});
et puis à l'injecter par nom dans vos contrôleurs. (Si l'on veut éviter d'en faire un service) - Ce qui signifie que je dois ajouter à chaque contrôleur manuellement. $rootScope est le chemin à parcourir pour ce que je voulais faire presque 2 ans =)
- OK. 🙂 Je viens de l'utiliser pour les directives isolé portée plus souvent que la plaine des contrôleurs et je dois injecter tout de toute façon. J'aime le code modulaire de style que ça donne. Aussi, vous n'avez pas de gâchis avec étendues parents de toute façon et vous n'avez pas à chercher beaucoup pour le cas où votre portée des variables viennent. 🙂
Vous devez vous connecter pour publier un commentaire.
En gros, vous avez deux options, soit la définir comme un service, ou à placer sur la racine de votre portée. Je vous conseille de vous rendre un service pour éviter de polluer la racine de la portée. Vous créez un service et de le rendre disponible dans votre contrôleur comme ceci:
Si ce n'est pas une option pour vous, vous pouvez l'ajouter à la racine de la portée comme ceci:
De cette façon, tous vos modèles peuvent appeler
globalFoo()
sans avoir à passer à un modèle à partir du contrôleur.foo()
fonctions? Faire un$scope.callFoo()
wrapper pour chacun d'entre eux est trop de travail. Comment puis-je "ajouter" toutes les fonctions d'une bibliothèque dans le champ d'application de sorte qu'il peut être utilisé dans le modèle? J'ai une grande unité de conversion de la bibliothèque que je veux qu'il soit disponible sur mon modèle.$scope.callFoo = myService.foo;
à la place de la création d'un nouveau papier d'emballage dans chaque lieu que vous souhaitez utiliser.Vous pouvez également les combiner entre eux, je suppose:
$rootScope
?Si la première approche est préconisée comme 'l'angle comme approche, je sens que c'ajoute les frais généraux.
Prendre en compte si je veux utiliser cette myservice.foo fonction dans 10 différents contrôleurs. Je vais préciser ce " myService la dépendance et puis $champ d'application.callFoo propriété étendue à tous les dix d'entre eux. C'est tout simplement une répétition et d'une certaine façon, viole le principe DRY.
Alors que, si j'utilise le $rootScope approche, je précise cette fonction globale gobalFoo qu'une seule fois et il sera disponible dans tous mes futurs contrôleurs, n'importe comment beaucoup de.
AngularJs a "Services" et "Usines" juste pour des problèmes comme la 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 angularjs composants..Vous pouvez les fonctions définies par l', stocker des données, calculer des fonctions ou ce que vous voulez à l'intérieur de Services et de les utiliser dans AngularJs Composants comme Mondiale.comme
si vous avez besoin de plus
En savoir Plus Sur le Pourquoi Nous avons Besoin d'AngularJs des Services et des Usines
Je suis un peu plus récent pour Anguleux, mais ce que j'ai trouvé utile de faire (et très simple) est que j'ai fait un script global que j'ai charger sur ma page avant le script local avec des variables globales que j'ai besoin d'accéder à toutes les pages de toute façon. Dans ce script, j'ai créé un objet appelé "globalFunctions", et a ajouté les fonctions que j'ai besoin d'accéder à l'échelle mondiale en tant que propriétés. par exemple,
globalFunctions.foo = myFunc();
. Ensuite, dans chaque script, j'ai écrit$scope.globalFunctions = globalFunctions;
et j'ai tout de suite avoir accès à toute fonction que j'ai ajouté à la globalFunctions objet dans le script global.C'est un peu une solution de contournement et je ne suis pas sûr que ça vous aide mais il m'a vraiment aidé comme j'ai eu beaucoup de fonctions et c'était une douleur ajout de tous les d'eux à chaque page.