【发布时间】:2013-02-03 15:59:40
【问题描述】:
在我的应用程序中,我必须在页面加载之前获取一些 JSON 数据并将其分配给一个数组。这是我使用 CardService 服务获取 JSON 的代码:
cards = [];
var cs = {
...
fetchCards: function() {
var d = $q.defer();
$http.get("data/cards.php").success(function(data) {
cards = data;
d.resolve();
}).error(function(data, status) {
d.reject(status);
});
return d.promise;
},
getCards: function() { return cards; };
...
}
在控制器的解析块中,我有以下内容:
WalletController.resolve = {
getCards: function(CardService) {
CardService.fetchCards().then(loadView, showError);
}
}
而在实际控制器中,我有以下几点:
function WalletController($scope, CardService) {
$scope.cards = CardService.getCards();
}
问题是,服务中的 fetchCards 函数似乎在将 JSON 数据分配给卡变量之前解决了承诺。这导致我的视图加载空白数据,直到我刷新几次并幸运。
我可以确认延迟加载,因为当我在控制台中记录卡变量时,我在第 122 行(加载我的视图时)得到一个空数组,在第 57 行得到一个完整数组(当 JSON 调用成功时) .第 57 行的代码以某种方式在视图加载后执行。
我该如何解决这个问题?
【问题讨论】:
标签: javascript ajax angularjs