Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从AngularJS中的控制器B调用控制器a中的函数_Angularjs - Fatal编程技术网

如何从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)来创建一个隔离作用域。