从另一个控制器Angular Js调用函数

Call function from another Controller Angular Js

本文关键字:调用 函数 Js Angular 另一个 控制器      更新时间:2023-09-26

我是使用angular js的新手,我已经声明了许多控制器,现在我想将一个控制器的功能使用到另一个控制器中。这是我的示例代码。

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();
    }
}

这应该行得通。