AngularJS-1回のAJAX呼び出しで複数のウィジェットのデータを取得する

マイケルR

複数のウィジェットのデータ取得に関するアーキテクチャ上の質問があります。

AngularJSを使用して大規模なJavaScriptアプリケーション(ミニSPA)を構築しています。ユーザーがレイアウトシステムのコンテナーに含める、除外する、または再配置することを選択できるインタラクティブなウィジェットを備えた、非常にモジュール化されたダッシュボードアプリケーションを作成したいと思います。ユーザーは各ウィジェットを操作して、ウィジェットのデータなどを個別に更新できます。各ウィジェットは、他のウィジェットとは非常に異なるデータを表示します。


これまでのアーキテクチャでは、各ウィジェットは次のAngularJSコンポーネントで表されます。

  • パーシャルビューテンプレート(ユーザーにデータを表示します)
  • コントローラ(ウィジェットの動作を実装し、対応するサービスの成功コールバックを処理するために)
  • サービス($ HTTPを使用してデータを取得し、呼び出し元のコントローラに約束オブジェクトを返すように)

したがって、各ウィジェットには、特定のエンドポイントを呼び出すAngularServiceを介して独自のデータをプルする機能があります。

これで、ユーザーが5つのウィジェットを含む可能性のあるダッシュボードページに到達したときに、5つの異なるサーバーエンドポイントに対して5つの個別の並列AJAX呼び出しを行いたくありません。それは効率的ではありません。サーバーへの並列リクエストを減らしたいのですが。

代わりに、ページに到着したら、5つのウィジェットのすべてのデータを集約したエンドポイントを呼び出すことによって単一のAJAX呼び出しを行いたいと思います。

質問:サーバーが5つのウィジェットからのすべてのデータを巧妙なラッパーで1つのJSONペイロードにバンドル/マージできると仮定すると、AngularJSアプリケーションで、そのデータを取得して5つのウィジェットコントローラーに配布する方法を教えてください。新しいサーバーデータで自分自身を初期化しますか?

もちろん、単一のウィジェットが自分自身だけを更新する機能を保持したいと思います。ダッシュボードページに到達する以外の動作は、この質問で私が尋ねていることではありませんが。

たぶんこれについて話している記事がそこにあるかもしれません、しかし私はまだそれを見つけていません。


私はすでに「良い」と思うアーキテクチャのアイデアを1つ考えましたが、もっと良い解決策があるのではないかと思います。

可能性)AJAX呼び出しを行うための5つのAngularサービスに加えて、WidgetAggregateServiceと呼ばれる6番目のサービスを導入します。それの場合はretrieveAllAndBroadcast()メソッドが実行され、このサービスは、成功コールバック自体を処理してから使用して5つのコントローラにペイロードを公開します$rootScope.$emit()したがって、WidgetAggregateServiceは、5つのコントローラーがサブスクライブできる$ rootScopeのメディエーターパターン(またはPubSubパターン)を使用し$rootScope.$on()ます。各ウィジェットのコントローラーは、集約データペイロード内の関連情報を取得できます。

マイケルR

私のチームと私は解決策を思いつきました…

API契約

JSONラッパーで1つ以上のウィジェット応答を返す1つ以上のウィジェット(関連する要求引数の受け渡しを含む)をサーバーに要求できるようにするAPIコントラクトを開発しました。したがって、次の方法で検索を実行できます。

  • 単一のウィジェットの取得
  • 複数の(集約された)ウィジェットの取得-一度に2つ以上のウィジェットのデータを要求しています。

サーバーへの1回の呼び出しで。


集計検索からウィジェットコントローラーにデータを配信する

1)集約検索:ページの読み込み時にページ上のすべてのウィジェットの集約検索を行うAngualrJS「ページ」コントローラーがあります。データ取得を処理するためにAJAXリクエストをNgファクトリに委任することにより、ページ上の5つのウィジェットすべてに対してリクエストを行います。これを「PageResourceFactory」と呼びます。

2)個々のウィジェットResourceFactoriesへの転送:「PageResourceFactory」にデータが正常に返されると、別のファクトリヘルパーを呼び出して、設定されたメソッドを呼び出す個々のウィジェットリソースファクトリに関連する応答を転送します。したがって、この時点で、5つのウィジェットリソースファクトリすべてにデータセットがあります。

3)ウィジェットコントローラーが新しいデータをサブスクライブする:ページの初期化中に、各ウィジェットコントローラーは、(リソースファクトリのsetメソッドを介して)新しいデータが設定されたときに基本的にリッスンするために、独自のリソースファクトリへのサブスクリプションを既にセットアップしています。したがって、コントローラーは、データがいつ変更されたか(ウィジェットコントローラーが取得を開始したかどうか)を知ることができます。

4)ウィジェットコントローラーがデータをバインドする:各ウィジェットコントローラーはデータの変更を「通知」されるため、ビューにバインドするスコープに配置することで、それに応じて応答できます。

単一の取得

これは、標準のAJAX検索でのみ機能します。
1)コントローラーはリソースファクトリを介して要求を行います。

2)$ httpを使用するリソースファクトリはAJAX要求を実行し、promiseオブジェクトをコントローラに戻します。

3)コントローラーは(promise呼び出しが成功した後)データを取得し、ビューに表示するためにデータをバインドします。


これが私たちが問題に取り組んだ方法です。他にも可能性があると思います。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

javascriptで1回のajax呼び出しを使用してより多くのAngularJSコントローラーにデータを挿入する方法

分類Dev

Angularjsの検索機能で複数のAjax呼び出しを処理する

分類Dev

Angularjs-forループで複数の$ http呼び出しからのデータを組み合わせる

分類Dev

最初のビュー呼び出しでAngularJSのSpringMVCからデータを取得する

分類Dev

AngularJSディレクティブ内のトランスクルージョンされた要素をクリックして関数を呼び出す

分類Dev

AngularJS-XHR呼び出しを複数回行う複数のディレクティブインスタンス

分類Dev

配列内のjsonデータを取得するためのAngularjsリソース呼び出し

分類Dev

Angularjsのカスタムディレクティブのコントローラーのng-init関数呼び出しからテンプレートを取得する必要があります

分類Dev

関数を呼び出すか、データを別のコントローラーに渡しますAngularJS

分類Dev

1つのHTMLページで複数のフォームを使用し、angularjsで両方のフォームのオブジェクトを取得します

分類Dev

アプリケーションがAngularjsの3層のような場合にajax呼び出しからデータを取得する方法

分類Dev

AngularJSでのpromiseを使用した複数のリソース呼び出し

分類Dev

このjavascriptが@AngularJS 1.2.26コントローラーで定義されているのは、ページを1回クリックするたびに呼び出されるのはなぜですか?奇妙な振る舞い

分類Dev

TypeScriptを使用してAngularJSのディレクティブ間で非同期呼び出しからのデータを共有する

分類Dev

AngularJsで同期的に複数のhttp呼び出しを行う

分類Dev

AngularJS:複数の非同期AJAX呼び出し

分類Dev

Googleチャート:Angularjsでの重複呼び出し

分類Dev

両方のコントローラーで1つの関数を呼び出す-AngularJS1.x

分類Dev

複数のチェックボックスの複数のリストに対するAngularJSフィルター

分類Dev

AngularJSでの複数の$ http呼び出し

分類Dev

AngularJs:$ httpサービスの複数の呼び出し

分類Dev

非同期呼び出しからのデータをAngularJSの変数に保存します

分類Dev

AngularJS:httpチェーン呼び出しの問題とNodeJS:複数のhttp呼び出しでの変数の使用の問題

分類Dev

AngularJSでQpromise関数呼び出しのブロックを作成します

分類Dev

AngularJSディレクティブは、1回ではなく、複数回呼び出します

分類Dev

AngularJSで別のスコープ関数を呼び出す方法

分類Dev

AngularJSアプリ:JSONからデータを1回ロードし、複数のコントローラーで使用します

分類Dev

AngularJSを使用した複数のAPI呼び出し

分類Dev

Angularjs-多くのサブコントローラー/複数のコントローラーのうちの1つのみを呼び出す

Related 関連記事

  1. 1

    javascriptで1回のajax呼び出しを使用してより多くのAngularJSコントローラーにデータを挿入する方法

  2. 2

    Angularjsの検索機能で複数のAjax呼び出しを処理する

  3. 3

    Angularjs-forループで複数の$ http呼び出しからのデータを組み合わせる

  4. 4

    最初のビュー呼び出しでAngularJSのSpringMVCからデータを取得する

  5. 5

    AngularJSディレクティブ内のトランスクルージョンされた要素をクリックして関数を呼び出す

  6. 6

    AngularJS-XHR呼び出しを複数回行う複数のディレクティブインスタンス

  7. 7

    配列内のjsonデータを取得するためのAngularjsリソース呼び出し

  8. 8

    Angularjsのカスタムディレクティブのコントローラーのng-init関数呼び出しからテンプレートを取得する必要があります

  9. 9

    関数を呼び出すか、データを別のコントローラーに渡しますAngularJS

  10. 10

    1つのHTMLページで複数のフォームを使用し、angularjsで両方のフォームのオブジェクトを取得します

  11. 11

    アプリケーションがAngularjsの3層のような場合にajax呼び出しからデータを取得する方法

  12. 12

    AngularJSでのpromiseを使用した複数のリソース呼び出し

  13. 13

    このjavascriptが@AngularJS 1.2.26コントローラーで定義されているのは、ページを1回クリックするたびに呼び出されるのはなぜですか?奇妙な振る舞い

  14. 14

    TypeScriptを使用してAngularJSのディレクティブ間で非同期呼び出しからのデータを共有する

  15. 15

    AngularJsで同期的に複数のhttp呼び出しを行う

  16. 16

    AngularJS:複数の非同期AJAX呼び出し

  17. 17

    Googleチャート:Angularjsでの重複呼び出し

  18. 18

    両方のコントローラーで1つの関数を呼び出す-AngularJS1.x

  19. 19

    複数のチェックボックスの複数のリストに対するAngularJSフィルター

  20. 20

    AngularJSでの複数の$ http呼び出し

  21. 21

    AngularJs:$ httpサービスの複数の呼び出し

  22. 22

    非同期呼び出しからのデータをAngularJSの変数に保存します

  23. 23

    AngularJS:httpチェーン呼び出しの問題とNodeJS:複数のhttp呼び出しでの変数の使用の問題

  24. 24

    AngularJSでQpromise関数呼び出しのブロックを作成します

  25. 25

    AngularJSディレクティブは、1回ではなく、複数回呼び出します

  26. 26

    AngularJSで別のスコープ関数を呼び出す方法

  27. 27

    AngularJSアプリ:JSONからデータを1回ロードし、複数のコントローラーで使用します

  28. 28

    AngularJSを使用した複数のAPI呼び出し

  29. 29

    Angularjs-多くのサブコントローラー/複数のコントローラーのうちの1つのみを呼び出す

ホットタグ

アーカイブ