在另一个控制器中调用一个控制器

时间:2014-11-18 09:09:40

标签: angularjs

是否有可能在另一个控制器中调用一个控制器功能。我一直看到数据在控制器之间进行操作,但不是函数。

例如。我有两个控制器。

Module.Controller('Controller1', function($scope){
    $scope.function1 = function(){};
});

Module.Controller("Controller2", function(){
    // I need to call the function function1() from the controller1
});

这可能吗?你能帮我解决一下吗?

2 个答案:

答案 0 :(得分:3)

如果您需要重用另一个控制器的逻辑,我建议将该逻辑移动到您可以在两个控制器中注入的服务。这是一个更清洁的解决方案,更容易测试。

示例:

Module.service("Service1", function(){
    this.function1 = function(){
        ...
    }
});

Module.Controller('Controller1', function($scope, Service1){
    $scope.function1 = Service1.function1;
});

Module.Controller("Controller2", function(Service1){
    // I need to call the function function1() from the controller1
    // simply call Service1.function1 here
});

答案 1 :(得分:0)

您无法直接将一个功能调用到另一个控制器中。但是,您可以通过以下方式更改内容:

  1. 使用$rootScope.function1代替$scope$rootScope是     可从每个$scope
  2. 获取
  3. 使用$rootScope.$emit从Controller2调用事件并在Controller1中使用$rootScope.$on捕获它,然后使用函数
  4. 您可以在服务中定义该功能并从两个控制器中使用它
  5. 如果控制器2可以更改Controller1范围内的某个变量,则可以使用$scope.$watch$rootScope.$watch,或使用$rootScope.$watch除非