如何在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日
我认为编写一个服务,以便注入到两个控制器中以共享数据,是最好的方法。
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); } });
有两种方法:
-
创建一个服务,在其中创建 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 } }]);