2015-04-06 33 views
50

ho bisogno di chiamare la funzione in un altro controller in angolare js.How è possibile modo per favore mi aiuti grazie in anticipoCome chiamare una funzione da un altro controller in angularjs?

Codice:

app.controller('One', ['$scope', 
    function($scope) { 
     $scope.parentmethod = function() { 
      // task 
     } 
    } 
]); 
app.controller('two', ['$scope', 
    function($scope) { 
     $scope.childmethod = function() { 
      // Here i want to call parentmethod of One controller 
     } 
    } 
]); 
+1

Inserire la funzione in un servizio e iniettare il servizio in entrambi i controller. Oppure, se il secondo ambito del controller è figlio del primo ambito del controller, chiamarlo direttamente. –

+1

Mi sembra una domanda XY; Mentre ci sono alcuni modi in cui * puoi * chiamare una funzione su un altro controller, ci sono davvero pochissimi buoni motivi per cui devi * farlo *. Forse descrivere il tuo problema reale sarebbe più utile di chiedere la soluzione che stai cercando di implementare? Chiamare una funzione su un controller diverso non è in realtà il "modo angolare" di fare le cose. – Claies

+0

è un controller un figlio/nipote dell'altro controller? O sono fratelli indipendenti? – pixelbits

risposta

100

comunicazione tra controllori è fatto anche se $emit + $on/$broadcast + $on metodi.

Quindi nel tuo caso si desidera chiamare un metodo di controllo "One" dentro Controller "Due", il modo corretto per farlo è:

app.controller('One', ['$scope', '$rootScope' 
    function($scope) { 
     $rootScope.$on("CallParentMethod", function(){ 
      $scope.parentmethod(); 
     }); 

     $scope.parentmethod = function() { 
      // task 
     } 
    } 
]); 
app.controller('two', ['$scope', '$rootScope' 
    function($scope) { 
     $scope.childmethod = function() { 
      $rootScope.$emit("CallParentMethod", {}); 
     } 
    } 
]); 

Mentre $rootScope.$emit viene chiamata, è possibile inviare tutti i dati come secondo parametro.

+0

Ottimo !! ha funzionato per me – Naveen

+2

Sono in grado di chiamare la funzione usando solo $ rootScope.function_name(); –

+0

con un problema minore per il passaggio param ..questo ha risolto un mio grosso problema. Grazie –

4

È possibile utilizzare gli eventi per fornire i dati. Codice come quello:

app.controller('One', ['$scope', function ($scope) { 
     $scope.parentmethod=function(){ 
       $scope.$emit('one', res);// res - your data 
     } 
    }]); 
    app.controller('two', ['$scope', function ($scope) { 
     $scope.$on('updateMiniBasket', function (event, data) { 
       ... 
     });    
    }]); 
19

Non utilizzare la funzione da un controller a un altro. Un approccio migliore sarebbe spostare la funzione comune in un servizio e quindi iniettare il servizio in entrambi i controller.

+3

Questo non è sempre possibile –

4

L'approccio migliore per comunicare tra i due controller è utilizzare gli eventi.

Vedere la documentazione scope

In questo controllare $on, $broadcast e $emit.

1

Se si desidera eseguire la funzione ParentMethod del controller genitore dentro un controllore bambino, lo chiamano:

$scope.$parent.parentmethod(); 

si può provare sopra here

8

Se il controller è twoannidati in One controllore.
Poi si può semplicemente chiamare:

$scope.parentmethod(); 

volontà angolare ricerca per parentmethod funzione partendo attuale portata e fino fino a quando non raggiungerà la rootScope.

Problemi correlati