在Angular App中包含第三方模块

Mat*_*man 1 angularjs

我想在我的应用程序中包含几个第三方Angular模块.以前我只创建了简单的应用程序,我只是使用ng-app来引导并将我的代码放在控制器中.

从我的理解,我应该在我的HTML中有类似的东西:

<html ng-app"myApp">
Run Code Online (Sandbox Code Playgroud)

那我的JS应该是这样的:

angular.module('myApp',['thirdPartyModule1','thirdPartyModule2']);

var myCtrl = function($scope, myApp, $http){

    //my stuff
};
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时,我收到一个错误:

Error: Unknown provider: myAppProvider <- myApp 
Run Code Online (Sandbox Code Playgroud)

Jon*_*wny 9

您不需要将myApp注入控制器.您的控制器应该像这样定义:

angular.module('myApp',['thirdPartyModule1','thirdPartyModule2']);

var myCtrl = function($scope, $http){
 //my stuff
});
Run Code Online (Sandbox Code Playgroud)

使它更"标准":

var myApp = angular.module('myApp',['thirdPartyModule1','thirdPartyModule2']);

myApp.controller('myCtrl', function($scope, $http){
  //my stuff
});
Run Code Online (Sandbox Code Playgroud)

这样,您可以根据需要引用您的应用.

现在使其与minifiers/beautifiers/closure编译器兼容:

var myApp = angular.module('myApp',['thirdPartyModule1','thirdPartyModule2']);

myApp.controller('myCtrl', ['$scope','$http', function($scope, $http){
  //my stuff
}]);
Run Code Online (Sandbox Code Playgroud)

这基本上使控制器参数成为一个数组,其中数组的第一个成员是你要注入的.这是因为minifier会将参数转换为随机字母,function(a,b)而angular将不知道你要注入的是什么.通过在数组中传递字符串,你将被缩小['$scope','$http', function(a,b)],因为这样很好,因为数组中的前两个参数告诉angular要注入什么.