ユーザーを認証し、ユーザーに関連付けられたトランザクションのリストを表示する単純な AngularJS アプリケーションを開発しています。さらに、ユーザーが取引を年ごとにフィルタリングできるドロップダウンがあります。コンボボックス モデルは、AngularJS リソースを介して API から取得する値の配列ですが、現在のユーザーを取得した後でのみ取得します。これはコードです:
//retrieve the user
UserManagement.getCurrentUser().then(function (user) {
//retrieve the transactions
$scope.transactions = Transactions.query({
userid: user.UserName,
status: $scope.status
});
//retrieve the array for the dropdown
//and return a promise
return TimeFilters.get({
userid: user.UserName,
status: $scope.status,
timefilter: 'years'
});
}).then(function (years) {
//set a scope variable to the array to bind in the view
$scope.timefilters.years = years;
console.debug(years);
//set also the currently selected year
$scope.timefilters.currentYear = $scope.timefilters.years[0];
})
今日プロミスを学び、何かを誤解したかもしれませんが、このコードは単純に見えます。
問題はcurrentYear
、の最初の要素にtimefilters.years
代入しようとすると、関数で代入しようとしているときに配列が空であってはならない場合でも、代入が失敗することです.then
。その結果、ドロップダウンには年が取り込まれますが、年は選択されていません。
ここで私は何を誤解しましたか?
ところで、リソース呼び出しは期待されるデータを返すので、それは問題ではありません。
編集:投稿した直後に、最初のreturnステートメントを次のように変更しましたthen
:
return TimeFilters.get({...}).$promise
そして今、それは尊敬されているように機能します。しかし、$resource.get はすでに promise を返すことを意図していると思いました。私は本当に混乱しています。誰かが明確にすることができますか?