从另一个Controller Angular Js调用函数

我是新手使用角度js,我已经声明了许多控制器,现在我想将一个控制器的function用于另一个控制器。 这是我的示例代码。

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

现在我想在controller3中调用test2函数。 任何人都可以帮助..感谢Avance … 🙂

您无法从控制器内的控制器调用方法。 您需要提取方法,创建服务并调用它。 这也将使代码彼此分离并使其更易于测试

 (function() { angular.module('app', []) .service('svc', function() { var svc = {}; svc.method = function() { alert(1); } return svc; }) .controller('ctrl', [ '$scope', 'svc', function($scope, svc) { svc.method(); } ]); })(); 

示例: http : //plnkr.co/edit/FQnthYpxgxAiIJYa69hu?p = preview

最好的方法是编写服务并在两个控制器中使用该服务。 请参阅文档服务文档

如果您真的想从另一个控制器访问控制器方法,请按照以下选项:在范围上发出事件:

 function FirstController($scope) { $scope.$on('someEvent', function(event, args) {});} function SecondController($scope) { $scope.$emit('someEvent', args);} 

控制器是一个构造函数,如果例如在指令中使用它将创建一个新实例。

假设您的控制器在同一范围内,您仍然可以按照自己的意愿行事,只需执行以下操作:

请注意,它们必须位于相同的范围内 ,如果未隔离子范围,它仍然可以工作。 该指令的定义:

 { controller: Controller1, controllerAs: 'ctrl1', link: function($scope) { $scope.ctrl1.test1(); // call a method from controller 1 $scope.ctrl2.test2(); // created by the directive after this definition $scope.ctrl3.test3(); // created by the directive after this definition } } .... { controller: Controller2, controllerAs: 'ctrl2', link: function($scope) { $scope.ctrl1.test1(); // created earlier $scope.ctrl2.test2(); // ... $scope.ctrl3.test3(); // created by the directive after this definition } } .... { controller: Controller3, controllerAs: 'ctrl3', link: function($scope) { $scope.ctrl1.test1(); $scope.ctrl2.test2(); $scope.ctrl3.test3(); } } 

这应该工作。