2013-03-14 18 views
57

AngularJSのドキュメントには、見つからないようなものがあります。AngularJSサーバーとクライアント間のデータの自動同期

バックエンドにNodeJSとExpressを使ってWebアプリケーションを作成していますが、フロントエンドでAngularとどのようにやり取りできるかを理解しようとしています。具体的には、AngularのJSON APIを使用して情報を取得します。私はフロントエンドが常に最新のものにしたい。

私の質問は以下のとおりです。

  • は、双方向のデータバインディング機能は角どういう意味($リソースをか $ HTTP)ごとに自動的にN 秒サーバーからデータをフェッチ?
  • 自然に長いポーリング、短いポーリング、またはWebソケットを使用していますか?
  • サーバーとクライアントの同期を実現するためにJQueryが必要ですか、それとも角度を使用して を実行することができますか?
  • この動作を行うには特別なコードを追加する必要がありますか ? $ timeoutを使用する必要がありますか?

私が見かけたすべての例は、クライアントがデータを1回取り出すことです。サーバーとデータを同期しません。

+3

Angularはクライアント/サーバーの同期を管理しません。バックエンドを定期的にポーリングする場合は、自分で書き込む必要があります。便宜のために$ timeoutを使うことができます(ダイジェストループ内で更新が行われます)が、独自のコードでスコープ更新を行う必要があります。 – Jollymorphic

答えて

81

AngularJSの双方向結合は、データモデル($ scope)とビュー(ディレクティブ)を指します。たとえば、モデルでデータが変更された場合、ビューは自動的に更新されます。同様に、ユーザーがビュー内のデータを変更すると、モデルは自動的に更新されます。

Webサービスとの対話は、$ httpサービスモジュールを介して行われます。

$ HTTPのための完全なドキュメントが AngularJS siteである
$http.get('/someUrl').success(successCallback); 

:だからあなたのRESTfulなAPIからデータを取得するために、あなたのような何かをするだろう。私はあなたがjQueryの$ .ajaxメソッドと非常によく似ていると思うでしょう。あなたはangleの$ timeoutサービス(基本的にsetTimeoutのラッパー)を使って簡単にポーリングを行う$ http.get()を簡単に設定できます。

AngularJSクライアントとサーバーAPIの間のリアルタイム更新については、Socket.ioを調べるとよいでしょう。これはnode.jsを使用してブラウザとサーバー間のライブソケット接続を作成し、古いブラウザの代替メカニズム(フラッシュ、ロングポーリング)を備えています。 https://github.com/btford/angular-socket-io-seed

要約すると::

は、双方向のデータバインディング機能は、(角$リソースまたは $を意味しているのSocket.ioとAngularJSを設定する方法を示しGitHubの上の定型プロジェクトがありますhttp)はn秒ごとにサーバから自動的にデータを取得しますか?

いいえ、双方向バインディングは、角度モデルとビューの間にあります。

自然に長いポーリング、短いポーリング、またはWebソケットを使用しますか?

角度には、デフォルトでこれらのいずれも含まれません。あなたは自分自身を設定する必要があります。

サーバーとクライアントの同期を実現するにはJQueryが必要ですか、すべてをAngularで行うことができますか?

$ HTTPで、広い意味では、jQueryのの角度と同等$アヤックス

あなたは、この動作を実現するために、余分なコードを追加する必要がありますか? $ timeoutを使用する必要がありますか?

ショートポーリングには$ timeoutを使用し、ロングポーリングやウェブソケットには独自のソリューションを使用してください(angular-socket-io-seedプロジェクトを参照)。

+2

非常に参考に - この場合の "モデル"はクライアント側であることに言及する価値があります。これは私には分かりませんでした。 Angularがsocket.ioを作ることを計画しているのか、それともAPIとライブラリにデフォルトで話すための何か他の方法を考えていますか?私はこの部分が彼らの文書に言及されていないことに驚いた。ありがとう! –

+0

このプロジェクトでは、このコンセプトをどのように実装するかについて、より多くの情報を得ることができます。それはKOに基づいていますが、あなたはアイデアを得ることができます:https://github.com/imrefazekas/knockout.sync.js – Qorbani

+0

Omnibinder - 現在のプロトタイプを調べる必要がありますが、サーバ - クライアントモデルの同期を処理することを検討しています。 – Bringer128

関連する問題