Eu preciso chamar a function em outro controlador em js angular.Como é possível, por favor me ajude obrigado antecipadamente
Código:
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 } } ]);
A comunicação entre controladores é feita através de $emit
+ $on
/ $broadcast
+ $on
methods.
Então, no seu caso, você quer chamar um método de Controller “One” dentro do Controller “Two”, a maneira correta de fazer isso é:
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", {}); } } ]);
Enquanto $rootScope.$emit
é chamado, você pode enviar qualquer dado como segundo parâmetro.
Eu não usaria a function de um controlador para outro. Uma abordagem melhor seria mover a function comum para um serviço e depois injetar o serviço em ambos os controladores.
Se o controlador two
estiver nested no controlador One
.
Então você pode simplesmente ligar:
$scope.parentmethod();
Angular irá procurar a function parentmethod
começando com o escopo atual e até atingir o rootScope
.
Você pode usar events para fornecer seus dados. Código assim:
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) { ... }); }]);
A melhor abordagem para você se comunicar entre os dois controladores é usar events.
Veja a documentação do escopo
Neste check out $on
, $broadcast
e $emit
.
Se você gostaria de executar a function parentmethod do controlador pai dentro de um controlador filho, chame-o:
$scope.$parent.parentmethod();
Você pode experimentar aqui