通过$ inject

时间:2017-11-06 12:40:21

标签: angularjs dependency-injection

在我的Angular应用程序中,我通过以下方式在控制器中注入依赖项:

function ProcessController ( WidgetService, $scope, $http, $state, SessionService, $mdToast, $mdDialog, $stateParams, CommonService ) 
{
    ...
}

ProcessController.$inject = [ 'WidgetService', '$scope', '$http', '$state', 'SessionService', '$mdToast', '$mdDialog', '$stateParams', 'CommonService' ];  
angular.module ( 'core' ).controller ( 'ProcessController', ProcessController );

在某些控制器中,它运行良好但在其中一些控制器中无法识别依赖关系。所以,如果我把它改成这样,那就再次运作良好。

function ProcessController(WidgetService,$scope,$http,$state, SessionService,$mdToast,$mdDialog,$stateParams,CommonService) 
{
    ...
}

angular.module ('core').controller (['WidgetService','$scope','$http','$state','SessionService','$mdToast','$mdDialog','$stateParams','CommonService',ProcessController]);

所以我想知道为什么我的$inject依赖注入失败了?

我遇到的一个用例是,通过使用第一种方法,我在控制器中得到$stateParamsundefined,但如果我使用第二种方法,我会在其中获得所需的数据。

2 个答案:

答案 0 :(得分:0)

按顺序排列

定义/声明模块

将控制器声明为angular

注入依赖项

定义控制器

经验法则应在您将控制器声明为角度

之后进行
 function ProcessController ( WidgetService, $scope, $http, $state, SessionService, $mdToast, $mdDialog, $stateParams, CommonService ) {
   ...
}

 angular.module ( 'core' ).controller ( 'ProcessController', ProcessController );

ProcessController.$inject = [ 'WidgetService', '$scope', '$http', '$state', 'SessionService', '$mdToast', '$mdDialog', '$stateParams', 'CommonService' ];  

答案 1 :(得分:-2)

您需要指定控制器的名称:

angular.module ('core')
.controller('ProcessController',['WidgetService', ...,'CommonService',ProcessController]);