Je suis nouveau à utiliser des JS angulaires et j'ai déclaré de nombreux contrôleurs et je souhaite maintenant une fonction utilisateur d'un contrôleur dans un autre contrôleur. Voici mon code d'exemple.
app.controller('Controller1',function($scope,$http,$compile){ $scope.test1=function($scope) { alert("test1"); } }); app.controller('Controller2',function($scope,$http,$compile){ $scope.test2=function($scope) { alert("test1"); } }); app.controller('Controller3',function($scope,$http,$compile){ /// });
3 Réponses :
Le meilleur moyen est d'écrire un service et utilisez ce service dans les deux contrôleurs. Voir la documentation Documentation de service
Si vous souhaitez vraiment accéder à la méthode du contrôleur d'un autre contrôleur, suivez L'option ci-dessous: Émettre un événement sur la portée: P>
function FirstController($scope) { $scope.$on('someEvent', function(event, args) {});} function SecondController($scope) { $scope.$emit('someEvent', args);}
Oui mais j'ai déjà écrit le code avec beaucoup de contrôleur, je dois maintenant appeler une seule fonction dans un autre contrôleur.
C'est très bien. Seulement que vous avez besoin est de déplacer cette fonction commune à un service et de l'appeler des contrôleurs requis.
Vous ne pouvez pas appeler une méthode à partir d'un contrôleur dans un contrôleur. Vous devrez extraire la méthode, créer un service et l'appeler. Cela découplera également le code les uns des autres et le rendra plus testable exemple: http : //plnkr.co/edit/fqnthypxgxaijya69hu? P = Aperçu P> P>
Le contrôleur est un constructeur, il créera une nouvelle instance si, par exemple utilisé dans une directive.
Vous pouvez toujours faire ce que vous vouliez, en supposant que vos contrôleurs soient dans la même portée, juste faire: P >
Notez qu'ils doivent être dans la même portée forte>, pourraient toujours fonctionner si une portée des enfants n'était pas isolée.
La définition de la directive: p> cela devrait fonctionner. P> p>