如何在AngularJS中从另一个控制器访问一个控制器的功能?

时间:2013-12-28 05:20:20

标签: javascript angularjs

如何从另一个控制器访问一个控制器的功能。

这是两个控制器,monthlyOptionsController和annualController。

myapp.controller("monthlyOptionsController", ['$scope','$injector', function($scope){

    $scope.initializeMonthlyCell   =   function(monthh){
    }
}]);

myapp.controller("yearlyController", ['$scope','$injector', function($scope){

    $scope.yearlyFunc   =   function(monthh){
         //here i want to access initializeMonthlyCell function 
         // like this initializeMonthlyCell(monthNumber);
    }
}]);

在annualFunc函数中我想访问initializeMonthlyCell函数/ 我怎样才能做到这一点。可能是这个重复的问题。但有人告诉我我该怎么做?

2 个答案:

答案 0 :(得分:3)

有两种方法:

  • 在服务中创建initializeMonthlyCell并将其注入您的控制器以重复使用。

  • 使用$ on,$ emit,$ broadcast在控制器范围之间进行通信。

使用第一种方法的示例代码(在您的情况下更推荐)

myapp.factory("dateService",function(){
       return {
             initializeMonthlyCell : function (month){

            }
        };
    });

    myapp.controller("monthlyOptionsController", ['dateService','$scope','$injector', function(dateService,$scope){

        $scope.initializeMonthlyCell   =   function(month){
           return dateService.initializeMonthlyCell(month);
        }
    }]);

    myapp.controller("yearlyController", ['dateService','$scope','$injector', function(dateService,$scope){

        $scope.yearlyFunc   =   function(monthh){
             // call dateService.initializeMonthlyCell
        }
    }]);

答案 1 :(得分:1)

我认为编写服务的最佳方法是在两个控制器中注入以共享数据。

myapp.service('Monthly', function() {
   return {
      initializeMonthlyCell: function(month) {
         return month;
      }
   }
});

myapp.controller("monthlyOptionsController", function($scope) { 

});

myapp.controller("yearlyController", function($scope, Monthly) {
   $scope.yearlyFunc   =   function(monthh){
     return Monthly.initializeMonthlyCell(monthh);
   }
});