在我的應用程序中,我必須獲取一些JSON數據並在加載頁面之前將其分配給數組。這是我使用CardService服務獲取的JSON代碼:AngularJS承諾在數據加載之前解決
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數據分配給cards變量之前的承諾。這導致我的視圖加載空白數據,直到我刷新幾次,幸運。
我可以確認後期加載,因爲當我在控制檯中記錄卡變量時,我在第122行(當我的視圖被加載時)獲得一個空數組,並且第57行的一個完整數組(當JSON調用成功)。第57行的代碼以某種方式在之後執行視圖被加載。
我該如何解決這個問題?
我不是同性戀,但我可以吻你馬上!!!這解決了一切。非常感謝! – kshep92
至於數據加載之前的視圖渲染問題,我意識到問題在於承諾被宣告和解決/拒絕的地方。看看這個小提琴:http://jsfiddle.net/kshep92/stdwj/3/ – kshep92
'angular.copy(數據,卡)'也將工作。當目的地提供給[copy()](http:// docs。angularjs.org/api/angular.copy)方法,它將首先刪除目標的元素,然後從源文件中複製新的元素。 –