AngularJSの$qサービスを使ってhttpリクエストを複数実行する方法を確認しました。
デモとコードサンプルはこちら。
※目次をクリックすると目次の下部にコンテンツが表示されます。
$httpサービスのプロミスオブジェクトをチェーン
$httpサービスはプロミスオブジェクトをリターンするので、このプロミスオブジェクトをチェーンして複数のhttpリクエストを順番に実行できます。
例)3つのhttpリクエストを順番に実行
例)3つのhttpリクエストを順番に実行
$scope.chain = function() { $scope.results1 = []; $http.get("/ng/q_chain.php?first=5").then(function onSuccess(response) { $scope.results1.push(response.data); $http.get("/ng/q_chain.php?second=1").then(function onSuccess(response) { $scope.results1.push(response.data); $http.get("/ng/q_chain.php?third=3").then(function onSuccess(response) { $scope.results1.push(response.data); }); }); }); };
qサービスのallメソッド
$qサービスのallメソッドで複数のpromiseを一つのpromiseとして集約して処理できます。
個々のpromiseで実行された結果を集約して一つのpromiseオブジェクトをリターンします。
例)3つのhttpリクエストを集約してまとめて実行
個々のpromiseで実行された結果を集約して一つのpromiseオブジェクトをリターンします。
例)3つのhttpリクエストを集約してまとめて実行
$scope.all = function() { $scope.results2 = []; var first = $http.get("/ng/q_chain.php?first=5"), second = $http.get("/ng/q_chain.php?second=1"), third = $http.get("/ng/q_chain.php?third=3"); $q.all([first, second, third]).then(function(result) { angular.forEach(result, function(response) { $scope.results2.push(response.data); }); }); };
サンプルコード
①$httpサービスをチェイン
3つのhttpリクエストを一つずつ順番に実行し、1つのhttpリクエストの実行結果取得後にhttpリクエストを実行。
②$qサービスのallメソッドで3つのhttpリクエストを集約して実行
3つのhttpリクエストを結果の取得を待たずに続けて実行し、3つのhttpリクエストの実行結果を取得した段階で3つ結果を順番に集約して実行。
③$qサービスのallメソッドを使ってhttpリクエストをループ処理
配列データから取得したデータを使ってループ処理で動的に$httpリクエストを生成し、この$httpリクエストを$qサービスのallメソッドに登録し、3つのhttpリクエストを集約して実行。
デモとコードサンプルはこちら。
3つのhttpリクエストを一つずつ順番に実行し、1つのhttpリクエストの実行結果取得後にhttpリクエストを実行。
②$qサービスのallメソッドで3つのhttpリクエストを集約して実行
3つのhttpリクエストを結果の取得を待たずに続けて実行し、3つのhttpリクエストの実行結果を取得した段階で3つ結果を順番に集約して実行。
③$qサービスのallメソッドを使ってhttpリクエストをループ処理
配列データから取得したデータを使ってループ処理で動的に$httpリクエストを生成し、この$httpリクエストを$qサービスのallメソッドに登録し、3つのhttpリクエストを集約して実行。
デモとコードサンプルはこちら。
AngularJSの特徴、仕組み
ビルトインディレクティブ
- ビルトインのディレクティブの概要
- データバインディングのディレクティブの概要
- ng-repeatを使ってリスト、テーブル、フィルター
- ng-includeを使って別のHTMLファイルを埋め込み
- ng-switchを使って内部にあるHTMLテンプレートの表示を切り替え
- ng-if、ng-show、ng-hideを使って表示、非表示を切り替え
- ng-class、ng-styleを使ってCSSを設定
- イベント処理
- 有効、無効を切替えるディレクティブ
- フォームの入力チェックを行い、動的にCSS追加
- ng-optionsを使ってSelectメニューを作成
- ng-repeatを使ってラジオボタンを作成
- ビルトインのフィルターの使用方法
- ビルトインのフィルターで関数を使用
- カスタムフィルターの使用方法
- Bootstrap3を使ってページング
- スクリプト内でフィルターを使用、既存のフィルターを拡張
サービス
- サービスの概要とfactory、service、providerの使い分け
- $qサービスでpromise/deferredパターン
- $httpサービスの概要、サーバーからJSONデータ取得
- $httpサービスのPOSTでデータ送信
- $qサービスを使ってhttpリクエストを複数実行
- $httpサービスのinterceptorの使用方法
- AngularJSのwithCredentialsの設定、CORS
- $timeoutサービスと$intervalサービス
- $resourceサービスを使ってREST
- $locationサービスを使ってURLを操作
- $routeサービスと$resourceサービスを使ったサンプルを作成
- routeChangeSuccessを使ってflashメッセージ表示
- JavaScript、CSSを含むHTMLデータをバインドして表示
カスタムディレクティブ
AngularJSの特徴、仕組み
ビルトインディレクティブ
- ビルトインのディレクティブの概要
- データバインディングのディレクティブの概要
- ng-repeatを使ってリスト、テーブル、フィルター
- ng-includeを使って別のHTMLファイルを埋め込み
- ng-switchで内部にあるHTMLテンプレートの表示を切り替え
- ng-if、ng-show、ng-hideを使って表示、非表示を切り替え
- ng-class、ng-styleを使ってCSSを設定
- イベント処理
- 有効、無効を切替えるディレクティブ
- フォームの入力チェックを行い、動的にCSS追加
- ng-optionsを使ってSelectメニューを作成
- ng-repeatを使ってラジオボタンを作成
- ビルトインのフィルターの使用方法
- ビルトインのフィルターで関数を使用
- カスタムフィルターの使用方法
- Bootstrap3を使ってページング
- スクリプト内でフィルターを使用、既存のフィルターを拡張
サービス
- サービスの概要とfactory、service、providerの使い分け
- $qサービスでpromise/deferredパターン
- $httpサービスの概要、サーバーからJSONデータ取得
- $httpサービスのPOSTでデータ送信
- $qサービスを使ってhttpリクエストを複数実行
- $httpサービスのinterceptorの使用方法
- AngularJSのwithCredentialsの設定、CORS
- $timeoutサービスと$intervalサービス
- $resourceサービスを使ってREST
- $locationサービスを使ってURLを操作
- $routeサービスと$resourceサービスを使ったサンプルを作成
- routeChangeSuccessを使ってflashメッセージ表示
- JavaScript、CSSを含むHTMLデータをバインドして表示
カスタムディレクティブ