如何从AngularJS中的控制器B调用控制器a中的函数
我的代码是这样的如何从AngularJS中的控制器B调用控制器a中的函数,angularjs,Angularjs,我的代码是这样的 Controller.JS angular.module('RateRequestApp.controllers', []).controller('ReadOnlyController', function($scope, rateRequestService) { $scope.rateData = []; rateRequestService.getData().success(function(response) { $scop
Controller.JS
angular.module('RateRequestApp.controllers', []).controller('ReadOnlyController', function($scope, rateRequestService) {
$scope.rateData = [];
rateRequestService.getData().success(function(response) {
$scope.rateData = response;
}).error(function (data, status, headers, config) {
$scope.openModal();
});
});
angular.module('RateRequestApp.controllers').controller('ModalDemoCtrl', function($scope, $modal, $log) {
$scope.openModal = function(size) {
var modalInstance = $modal.open({
templateUrl: 'myModalContent.html',
controller: 'ModalInstanceCtrl',
size: size,
});
};
});
App.JS
angular.module('RateRequestApp', [
'RateRequestApp.services',
'RateRequestApp.controllers',
'ui.bootstrap'
]);
如您所见,我正在尝试调用函数$scope.openModal()代码>在另一个控制器中,显然它会抛出一个错误
TypeError: undefined is not a function
排队
$scope.openModal();
有没有办法克服这个问题?您可以使用angular controller service$controller将一个控制器插入另一个控制器
angular.module('RateRequestApp.controllers', []).controller('ReadOnlyController', ['$controller','$scope', function($scope, rateRequestService,$controller) {
var modalDCtrl = $scope.$new();
$controller('ModalDemoCtrl',{$scope : modalDCtrl });
$scope.rateData = [];
rateRequestService.getData().success(function(response) {
$scope.rateData = response;
}).error(function (data, status, headers, config) {
modalDCtrl.openModal();
});
}]);
但是,您还需要将该方法附加到控制器实例,而不是$scope
angular.module('RateRequestApp.controllers').controller('ModalDemoCtrl', function($scope, $modal, $log) {
this.openModal = function(size) {
var modalInstance = $modal.open({
templateUrl: 'myModalContent.html',
controller: 'ModalInstanceCtrl',
size: size,
});
};
});
引用:由于控制器不可注射,所以我不会尝试。请尝试利用共享服务。在应用程序中定义控制器,然后根据需要注入控制器。您还没有提到模型实例控制器的实现。所以我想你忘了实施它
angular.module('RateRequestApp.controllers', []).controller('ReadOnlyController', function($scope, rateRequestService) {
// ReadOnlyController's logic
}));
angular.module('RateRequestApp.controllers').controller('ModalDemoCtrl', function($scope, $modal, $log) {
/**
* This might be missing
*/
var ModalInstanceCtrl = function ($scope, $modal) {
// ModalInstanceController's logic
};
$scope.openModal = function(size) {
var modalInstance = $modal.open({
templateUrl: 'myModalContent.html',
controller: ModalInstanceCtrl,
size: size,
});
};
}));
App.JS
angular.module('RateRequestApp', [
'RateRequestApp.services',
'RateRequestApp.controllers',
'ui.bootstrap'
]);
希望上面的代码片段会有帮助:)$controller会很有帮助,尝试这个链接你会得到好主意。它们可能可以通过$controller服务注入。。。但你为什么要这么做?我认为这不是一个好的设计。我不完全理解你的答案。你能详细说明一下吗?你不能将“ReadOnlyController”注入到另一个控制器函数中。这是不允许的。有一个很好的理由,它不是为允许这样做而设计的。这个问题没有其他解决方案吗?您的代码给了我一个错误:[ng:areq]参数“ReadOnlyController”不是函数,已编辑。可能是因为我忘记了依赖项注入的“[”。基本上使用了与您相同的代码设置,但是-将$controller服务注入到您的“ReadOnlyController”-使用$controller('ModalDemoCtrl',{$scope:modalDCtrl})定义另一个控制器;-将“$scope”更改为“this”在'ModalDemoCtrl'中,现在抛出一个错误TypeError:undefined不是modalDCtrl.openModal()行的函数;尝试通过在$new()方法中传递true-$new(true)来创建一个隔离作用域。