Ho bisogno di chiamare la funzione in un altro controller in js angular. Come è ansible modo per favore aiutami grazie in anticipo
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 } } ]);
La comunicazione tra i controller avviene tramite $emit
+ $on
/ $broadcast
+ $on
metodi.
Quindi nel tuo caso vuoi chiamare un metodo di Controller “One” all’interno del Controller “Two”, 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
è chiamato, puoi inviare qualsiasi dato come secondo parametro.
Non userei 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.
Se i two
controller sono nidificati in One
controller.
Quindi puoi semplicemente chiamare:
$scope.parentmethod();
Angular cercherà la funzione parentmethod
partire dall’ambito corrente e fino a quando non raggiungerà il rootScope
.
È ansible utilizzare gli eventi per fornire i propri 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) { ... }); }]);
L’approccio migliore per comunicare tra i due controller è utilizzare gli eventi.
Vedi la documentazione dell’ambito
In questo controllo $on
, $broadcast
e $emit
.
Se si desidera eseguire la funzione parentmethod del controllore genitore all’interno di un controller figlio, chiamarla:
$scope.$parent.parentmethod();
Puoi provarlo qui