12
votes

Fonction d'appel d'un autre contrôleur angulaire JS

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){
  ///
});


0 commentaires

3 Réponses :


4
votes

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);}


2 commentaires

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.



13
votes

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 xxx

exemple: http : //plnkr.co/edit/fqnthypxgxaijya69hu? P = Aperçu


0 commentaires

0
votes

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:

Notez qu'ils doivent être dans la même portée , pourraient toujours fonctionner si une portée des enfants n'était pas isolée. La définition de la directive: xxx

cela devrait fonctionner.


0 commentaires