私のアプリでは、ページが読み込まれる前に、いくつかの 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();
}
問題は、JSON データが cards 変数に割り当てられる前に、サービスの fetchCards 関数が promise を解決しているように見えることです。これにより、数回更新して運が良くなるまで、ビューに空のデータが読み込まれます。
カード変数をコンソールに記録すると、122 行目 (ビューがロードされたとき) で空の配列が取得され、57 行目 (JSON 呼び出しが成功したとき) で完全な配列が取得されるため、ロードの遅延を確認できます。57 行目のコードは、ビューが読み込まれた後に何らかの形で実行されます。
これを修正するにはどうすればよいですか?