【发布时间】:2016-11-01 16:38:47
【问题描述】:
我定义了一个 json 文件,我正在尝试加载我的一个控制器。我正在使用工厂来获取数据:
.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 ;
});
}
}
})
稍后在我的控制器中,我在 loadData() 函数中调用 getAllData():
.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 是“未定义”。
我尝试的是在$scope.loadData() 调用之前定义$scope.myData(参见代码中的注释)。不幸的是,这个简单的变量声明使我的应用程序完全冻结。我还没有找到原因。另外,我不确定这是否与我的整体问题有关。
那么我错过了什么?为什么我无法将“http get”结果存储在控制器的$scope 中?
编辑:所以在我的例子中,我需要数据在当前控制器被使用之前就已经存在。将控制器中执行的所有代码放入promise的.then-chain 是否是一个合法的选择?
【问题讨论】:
标签: javascript angularjs json angularjs-scope http-get