2013-02-27 57 views
12

我正在嘗試AngularJS第一次。當使用$http.post("url", data)函數時,我得到一個Error: $http is not defined控制檯消息。

在我的HTML頁面的頂部,我在包括所有其他JS導入後的AngularJS。

我也包括因小部件其他JavaScript庫的依賴等我的劇本導入部分看起來是這樣的:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" type="text/javascript"></script> 
<script src="http://www.trirand.com/blog/jqgrid/js/i18n/grid.locale-en.js" type="text/javascript"></script> 
<script src="http://www.trirand.com/blog/jqgrid/js/jquery.jqGrid.min.js" type="text/javascript"></script> 
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.0/jquery-ui.min.js"></script> 

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js"></script> 

我有我用來發送一些數據到服務器,控制器:

function FormCtrl($scope) { 
    $scope.sendData = function(){ 
     var data = "firstName=" + $scope.firstName + "&" + 
      "lastName=" + $scope.lastName + "&" + 
      "address=" + $scope.address + "&" + 
      "postcode=" + $scope.postcode; 

     $http.post("/data/person/put", data); 
    }; 
} 

sendData函數附加到按鈕上。所有工作正常,直到調用$http.post(...)在此時控制檯輸出錯誤。

完整的錯誤列表:

Error: $http is not defined 
[email protected]://localhost:8080/angularjs/:96 
Mc/x/<@https://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js:71 
ec[c]</</</<@https://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js:142 
e.prototype.$eval[email protected]://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js:87 
[email protected]://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js:87 
ec[c]</</<@https://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js:142 
[email protected]://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js:63 
c.event.add/[email protected]://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js:57 

https://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js 
Line 61 

我必須做別的事情AngularJS配置爲使用$http.post功能?

我解除了使用直接從AngularJS 快捷方法這裏的文檔部分:http://docs.angularjs.org/api/ng.$http

誰能幫助?

感謝 亞當

回答

23

function FormCtrl($scope) {應該function FormCtrl($scope, $http) {

您需要注入控制器所需的所有服務,在這種情況下,您使用的是$scope$http服務,但您只注入了造成錯誤的原因$scope

例:

function FormCtrl($scope, $http) { 
    .... 
} 
FormCtrl.$inject = ['$scope', '$http']; 

你可以閱讀關於注射微小here併發症一張紙條,讀A Note on Minification

+0

嘗試過了,現在完全工作。感謝您的快速回復。這麼快,我甚至不能接受你的答案。但我會。再次感謝! – 2013-02-27 12:46:28

+1

你可以在http://docs.angularjs.org/tutorial/step_05上閱讀關於注射併發症的注意事項 – 2013-02-27 12:47:29