1

我想从 app.js 文件中调用控制器方法 [getFacility()]。但是当我使用下面的代码段时,我得到了类似的错误

Error: [$injector:unpr] Unknown provider:

这是我的控制器文件和服务文件

应用程序.js

...
...     
.state('facilityHome.editFacility', 
{
   url: '/editFacility/:facilityId',
   templateUrl: '/views/facility/newFacility.html',
   controller: 
        function($scope, $stateParams, facilityController) {
                facilityController.getFacility($stateParams.facilityId);
         }
}

....
...

设施Controlelr.js

app.controller('facilityController',
['$scope', '$rootScope','$location','$filter', 'facilityService',
    function ($scope, $rootScope,$location,$filter, facilityService){

        /* Assign Object */
        var facilityScope = this;

        /* Initialize DTO Object */
        facilityScope.facilityDTO={
            id:null,
            version:null,
            facilityName:"",
            description:""
        };


        /* Initialize Object Array */
        facilityScope.facilityList = [];


        facilityScope.getFacility=function(id){
            facilityService.fetchFacility(id)
                .then(
                function(successRespond) {
                    $scope.facilityDTO = successRespond;
                },
                function(errResponse){
                    console.error('Error while fetching');
                    console.error(errResponse);
                }
            );

        };

    }
]);

这是我在控制台中得到的。

“错误:[$injector:unpr] 未知提供者:facilityControllerProvider <- facilityController http://errors.angularjs.org/1.5.0/ $injector/unpr?p0=facilityControllerProvider%20%3C-NaNacilityController minErr/<@ https: //ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js:68:12 createInjector/providerCache.$injector<@ https://ajax.googleapis.com/ajax/libs/angularjs/1.5 .0/angular.js:4397:19 getService@ https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js:4550:39 createInjector/protoInstanceInjector<@ https://ajax. googleapis.com/ajax/libs/angularjs/1.5.0/angular.js:4402:28 getService@ https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js:4550:39 injectionArgs@ https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js:4574:58 instantiate@ https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0 /angular.js:4616:18 $ControllerProvider/this.$gethttps://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js:9870:18 z/<.compile/<@ https ://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.3.1/angular-ui-router.min.js:7:23873 invokeLinkFn@ https://ajax.googleapis.com/ajax/ libs/angularjs/1.5.0/angular.js:9492:9 nodeLinkFn@ https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js:8978:11 CompositeLinkFn@ https:// ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js:8226:13 publicLinkFn@https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js:8106:30 编译生成器/<@ https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0 /angular.js:8447:20 l@ https://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.3.1/angular-ui-router.min.js:7:23072 y/l .compile/https://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.3.1/angular-ui-router.min.js:7:23492 $RootScopeProvider/this.$gethttps:// ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js:17143:15 v/y.transitionTo/y.transition<@ https://cdnjs.cloudflare.com/ajax/libs/angular- ui-router/0.3.1/angular-ui-router.min.js:7:18793 processQueue@ https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js:15552:28 调度进程队列/<@https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js:15568:27 $RootScopeProvider/this.$gethttps://ajax.googleapis.com/ajax/libs/angularjs/1.5 .0/angular.js:16820:16 $RootScopeProvider/this.$gethttps://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js:16636:15 $RootScopeProvider/this.$gethttps ://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js:16928:13 done@ https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular。 js:11266:36 completeRequest@ https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js:11464:7 requestLoaded@ https://ajax.googleapis.com/ajax/libs/ angularjs/1.5.0/angular.js:11405:9

4

2 回答 2

1

要将控制器注入另一个控制器,请使用该$controller服务。

.state('facilityHome.editFacility', 
{
   url: '/editFacility/:facilityId',
   templateUrl: '/views/facility/newFacility.html',
   controller: 
       function($scope, $stateParams, $controller) {
           var facCtrl = $controller("facilityController", {'$scope': $scope});
           facCtrl.getFacility($stateParams.facilityId);
       }
}

因为facilityController操纵$scope$scope需要作为局部注射。

有关更多信息,请参阅AngularJS $controller 服务 API 参考

于 2016-08-30T16:02:43.523 回答
-1

您不能在另一个控制器中注入控制器。您需要工厂/服务。

查看一些文档:https ://docs.angularjs.org/guide/services

于 2016-08-30T07:55:40.600 回答