我有一个回调函数,它与服务器响应中的数据一起使用。 在函数中我试图用数据结果填充数组。 我填充的数组是在插入我的主应用程序模块的不同模块的服务中定义的。我使用这种方法在所有控制器中访问这个数组,这是一种全局已知的数组。
angular.module('HighLowTodayApp.services', [])
.factory('HLTglobalData',['$http',function($http){
globalData.currentDomainsList = {};
return {
currentDomainsList : globalData.currentDomainsList
}
});
填充数组的回调函数如下所示:
$scope.getDomainsStatisticsSuccess = function(data){
HLTglobalData.currentDomainsList = data.slice();
console.log(JSON.stringify(data));
console.log(JSON.stringify(HLTglobalData.currentDomainsList));
//go to showDomainsList page
$location.path("/showDomainsList");
};
问题是控制器的init()函数从“/ showDomainsList”路径开始先触发HLTglobalData.currentDomainsList。
我在上面提到的init()函数中有一个console.log(JSON.stringify(HLTglobalData.currentDomainsList)),它在控制台中显示的是一个空对象{},并且它在前面显示了两个console.log来自 getDomainsStatisticsSuccess函数。
在完成复制数组之前,它以某种方式更改了位置。 我在我的所有项目中使用了这个方法,这是唯一一个像这样的地方。
我忘了提及它在Cordova项目中运行的角度应用程序,但我认为这应该不是问题。
有什么想法吗? 提前谢谢!
答案 0 :(得分:0)
因此,使用异步内容的最佳方法是Promise。例如:
```
function myService($q){
var def = $q.defer
$http().then((data) => def.resolve(data))
return def
}
function myCtrl($location) {
myService.then(() => $location.path('/somewhere'))
}
```