在Angular App中包含第三方模块

时间:2013-08-07 03:38:52

标签: angularjs

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

根据我的理解,我的html中应该有这样的东西:

<html ng-app"myApp">

然后我的JS应该是这样的:

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

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

    //my stuff
};

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

Error: Unknown provider: myAppProvider <- myApp 

1 个答案:

答案 0 :(得分:9)

您无需将myApp注入控制器。你的控制器应该这样定义:

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

var myCtrl = function($scope, $http){
 //my stuff
});

使它更“标准”:

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

myApp.controller('myCtrl', function($scope, $http){
  //my stuff
});

这样,如果您愿意,可以引用您的应用。

现在让它与minifiers / beautifiers / closure编译器兼容:

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

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

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