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

12 浏览
0 Comments

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

这个问题已经有了答案

一个AngularJS控制器可以调用另一个控制器吗?

我怎样才能从另一个控制器中访问一个控制器的函数。

这里有两个控制器,一个是monthlyOptionsController,另一个是yearlyController。

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

在yearlyFunc函数中,我想访问initializeMonthlyCell函数/我该怎么做。也许这是一个重复的问题,但是有人告诉我该怎么做?

admin 更改状态以发布 2023年5月21日
0
0 Comments

我认为编写一个服务,以便注入到两个控制器中以共享数据,是最好的方法。

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

0
0 Comments

有两种方法:

  • 创建一个服务,在其中创建 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
        }
    }]);

0