2015-11-06 68 views
1

每當我嘗試使用$http.get(無論在控制器還是服務中),我的$scope變量都有問題。

我的控制器看起來是這樣的:

app.controller('HomeController', ['$scope', function($scope, $http) { 
    $scope.today = new Date(); 
}]); 

然後我得到的6.11.2015用於例如今天變量適當的輸出。 但只要我把這個或使用服務:

app.controller('HomeController', ['$scope', function($scope, $http) { 
    $scope.today = new Date(); 
    $http.get("data/selectAll.php") 
    .success(function(data) { 
     $scope.lokale = data; 
    }); 
}]); 

然後,它不工作了,我只得到{{today | date : 'dd.MM.yyyy'}}$scope.lokale變量也不起作用。 我試圖使用一個json文件(我知道它確實可行),以確保我的php文件不是問題,並且它也不起作用,所以在這裏似乎沒有問題。

回答

0

你的語法有一點小錯誤。 :)

app.controller('HomeController', ['$scope', '$http', function($scope, $http) { 

你forgoten控制器功能前加$ HTTP作爲字符串。

看看這個Angular Doc about Dependency Injection。尋找「關於縮小的注意事項」。

上縮小 注意事項由於角度推斷控制器的依賴從參數控制器的構造函數的名字,如果你是來縮小爲PhoneListCtrl控制器的JavaScript代碼,它的所有函數參數將精縮以及,並且依賴注入器將無法正確識別服務。

我們可以通過用作爲字符串提供的依賴關係的名稱註釋該函數來克服這個問題,這些字符串不會被縮小。有兩種方法可以提供這些注入註釋:

在包含字符串數組的控制器函數上創建$ inject屬性。數組中的每個字符串都是爲相應參數注入的服務的名稱。在我們的例子中,我們可以這樣寫:

function PhoneListCtrl($scope, $http) {...}` 
PhoneListCtrl.$inject = ['$scope', '$http']; 
phonecatApp.controller('PhoneListCtrl', PhoneListCtrl); 

使用內聯註釋哪裏,而不是僅僅提供此項功能,您提供的數組。該數組包含服務名稱的列表,後面跟着函數本身。 PhoneListCtrl($ scope,$ http){...} phonecatApp.controller('PhoneListCtrl',['$ scope','$ http',PhoneListCtrl]); 這兩種方法都可以與Angular注入的任何函數一起工作,所以這取決於您項目的風格指南來決定使用哪一個函數。

當使用第二種方法,它是常見的註冊控制器時提供的構造函數內聯作爲一個匿名功能:

phonecatApp.controller('PhoneListCtrl', ['$scope', '$http', function($scope, $http) {...}]);

+0

謝謝!唉,我有時候很愚蠢* facepalm * – Linda

+0

如果你認爲你是,你應該看看[這個](http://stackoverflow.com/questions/32957123/express-router-crud-api-cannot-刪除)我的問題。哈哈。 – Rodmentou

1

的正確方式使用$ HTTP是

$http.get('/someUrl', config).then(successCallback, errorCallback); 

使用.then()而不是.success()