У меня есть json-файл, и я пытаюсь загрузить его в один из моих контроллеров. Я использую фабрику для извлечения данных:Не удается сохранить результат http в области
.factory('myService', function($http) {
var all_data = [];
return {
getAllData: function(){
return $http.get('js/data/all_data.json').then(function(data) {
all_data = data;
return all_data ;
});
}
}
})
Позже в моем контроллере я называю getAllData()
в loadData()
-функции:
.controller('QuizCtrl',['$scope','$state','$http','myService',function($scope,$state,$http,myService){
// $scope.myData = []; <-- this makes the app freeze and not respond anymore
$scope.loadData = function(){
myService.getAllData().then(function(all_data){
$scope.myData = all_data.data.all_data;
alert($scope.myData);
});
}
$scope.loadData();
$scope.another_var = $scope.myData;
}])
Как вы можете видеть, в первую очередь, я также призываю loadData()
. При отладке внутри функции (см. alert()
) я ясно вижу, как json был загружен и применен к переменной $scope.myData
.
Как только я попытаюсь назначить переменную другой переменной (см. $scope.another_var
), myData является «undefined».
Что я пытался было определить $scope.myData
перед вызовом $scope.loadData()
(см. Комментарий в коде). К сожалению, это простое объявление переменной делает мое приложение полностью замороженным. Я еще не нашел причины для этого. Кроме того, я не уверен, связано ли это с моей общей проблемой.
Так что я пропустил? Почему я не могу сохранить результат «http get» в моем контроллере $scope
?
EDIT: В моем случае мне нужны данные, которые должны быть там до того, как будет использоваться текущий контроллер. Будет ли законным вариантом поставить весь код, который выполняется в контроллере, в .then
-цепочку обещаний?
К сожалению, это не решает проблему @Marc Расмуссен –
@ Käsebrot Не могли бы вы оставить скрипку или что-то подобное, то иль с удовольствием смотреть его и сделать его работу. Im 100% уверен, что это имеет какое-то отношение к promiss –