2013-08-07 110 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

太好了......謝謝......一步一步地讓我頭腦發熱。 –