如果您需要使用該函數外的響應數據,請在定義drinkSet函數之前先嚐試實例化一個變量。假設你的數據被設定於caffeineData是一個數組,像這樣:
app.controller('analysisController',function(Drink,DrinkLibrary,$scope){
console.log('connected');
var caffeineData = []; // could also set via $scope.caffeineData
var drinkSet = function(){
DrinkLibrary.getDrinks().success(function(data){
caffeineData = data;
});
};
drinkSet();
});
通過實例它的功能外,它不會被保密的函數(JS有function level scope for variables)。這裏的好處是,如果在yoru caffeineData var中設置了在DOM中生成的任何內容,則可以在填充之前使其在空數組上正確構建。
我們可以在這裏進一步改進控制器,假設您的成功回調中除了設置數據之外沒有任何其他事情發生;看看:
app.controller('analysisController',function(Drink,DrinkLibrary,$scope){
console.log('connected');
var caffeineData = []; // could also set via $scope.caffeineData
DrinkLibrary.getDrinks().success(function(data){
caffeineData = data;
});
});
至於你想在圖表中使用這些數據,你可以定義成功回調裏面圖表發起的呼叫,只調用您的數據成功設定圖表建築功能。
[編輯] 每我的意見,這裏是一個更新的版本,我建議你試試。你會注意到我把console.log 裏面的成功/錯誤回調,以確保你的轉儲到控制檯是在諾言解決之後,無論哪種方式。我已經包含了註釋和其他回調參數,如$http.get example from the AngularJS docs中所示,其中評論專門討論承諾的異步性質。
app.controller('analysisController',function(Drink,DrinkLibrary,$scope){
console.log('connected');
$scope.caffeineData = []; // could also set via $scope.caffeineData
DrinkLibrary.getDrinks()
.success(function(data, status, headers, config){
// this callback will be called asynchronously
// when the response is available
$scope.caffeineData = data;
console.log("Response code of the GET was: "+status);
console.log("Data received: "+data);
}).error(function(data, status, headers, config) {
// called asynchronously if an error occurs
// or server returns response with an error status.
$scope.caffeineData = null; //no data :'-(
console.log("data: " + data);
console.log("status: " + status);
//console.log("headers: " + headers);
//console.log("config: " + JSON.parse(config));
});
});
[/編輯]
如果youre新的角度,我強烈建議你閱讀新的教程,而不是使用$範圍,如果沒有必要的。改用[ControllerAs](http://toddmotto.com/digging-into-angulars-controller-as-syntax/)。 – LionC
謝謝你的建議。我希望能夠更好地掌握佈局和最佳實踐,並持續不斷。 – Winnemucca