Если вам нужно использовать данные ответа вне этой функции, сначала попробуйте создать экземпляр переменной, прежде чем определять функцию 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). Преимущество здесь в том, что, если что-либо настроено для создания в DOM из yoru caffeineData var, вы можете построить его правильно над пустым массивом, прежде чем он будет заполнен.
Есть еще одно улучшение, которое мы можем сделать для вашего контроллера здесь, предполагая, что в вашем обратном вызове успеха ничего не происходит, кроме заданных данных; имеет вид:
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));
});
});
[/ Edit]
Если Youre новый для углового я настоятельно рекомендую вам прочитать новые учебники и не использовать $ объем, если не требуется. Вместо этого используйте [ControllerAs] (http://toddmotto.com/digging-into-angulars-controller-as-syntax/). – LionC
Благодарим вас за советы. Я надеюсь, что буду лучше разбираться в макете и передовой практике, поскольку я продолжаю. – Winnemucca