如何从angularjs从另一个控制器调用一个函数?
我需要在另一个控制器angularJS调用函数。请问如何提前帮助我
代码:
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 } } ]);
控制器之间的通信是通过$emit
+ $on
/ $broadcast
+ $on
方法完成的。
所以在你的情况下,你想调用控制器“一”内的控制器“两”的方法,正确的方法是:
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", {}); } } ]);
在调用$rootScope.$emit
,可以发送任何数据作为第二个参数。
我不会使用从一个控制器到另一个控制器的function。 一个更好的方法是将公共function移到服务上,然后在两个控制器中注入服务。
如果two
控制器嵌套在One
控制器中。
那么你可以简单地调用:
$scope.parentmethod();
Angular将search从当前作用域开始的parentmethod
函数,直到它到达rootScope
。
您可以使用事件来提供您的数据。 这样的代码:
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) { ... }); }]);
在两个控制器之间进行通信的最佳方法是使用事件。
请参阅范围文档
在这个检查$on
, $broadcast
和$emit
。
如果您想要在子控制器内执行父控制器的parentmethod函数,请调用它:
$scope.$parent.parentmethod();
你可以在这里试试