2013-08-07 60 views
1

我想在我的应用中包含几个第三方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 

回答

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 /美化/关闭编译器兼容:

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

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

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

+0

谢谢,学习这样的最佳实践总是很好的。现在,当我尝试访问第三方模块中的函数时,像这样:thirdPartyFunction.doSomething我得到未定义的“thirdPartyFunction”。 –

+0

你不能像那样访问它们。 Angular模块提供服务,指令,过滤器等。一旦他们完成了这些,你就可以在你的应用中使用它们。所以如果'thirdPartyModule'有一个'FunTimes'服务,你可以像'$ http'一样注入'FunTimes'。同样,如果thirdPartyModule有一个过滤器,那么您只需使用它...'{{something |第三方过滤器}}' –

+0

太好了......谢谢......一步一步地让我头脑发热。 –