我需要在角度j的另一个控制器中调用函数。如果有可能请帮助我提前感谢
代码:
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
}
}
]);
答案 0 :(得分:109)
控制器之间的通信是通过$emit
+ $on
/ $broadcast
+ $on
方法完成的。
所以在你的情况下你想在Controller“Two”中调用一个Controller“One”的方法,正确的方法是:
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
时,您可以将任何数据作为第二个参数发送。
答案 1 :(得分:21)
我不会将功能从一个控制器用到另一个控制器。更好的方法是将公共功能移动到服务,然后在两个控制器中注入服务。
答案 2 :(得分:7)
two
控制器中的One
控制器 嵌套 。
然后你可以简单地打电话:
$scope.parentmethod();
Angular会以parentmethod
函数搜索从当前作用域开始向上,直至达到rootScope
。
答案 3 :(得分:5)
您可以使用事件来提供数据。这样的代码:
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) {
...
});
}]);
答案 4 :(得分:4)
答案 5 :(得分:1)