0

標準の JS アプリを ng アプリに変換して angularJS を学習してから数日が経ちました。私はこの単純なシナリオについて疑問に思っていました:

私は fb_connect() と呼ばれるグローバル関数を持っています。Facebook ベースのログインを作成するために、任意のページ (または必要に応じて任意のコントローラー) から使用できます。この関数は単純な http 呼び出しを行い、次に進むデータを含む JSON オブジェクトを受け取ります (ポップアップの表示、ログインなど...)。

アプリのファクトリーまたはサービスを定義し、それを任意のコントローラーで使用できることを読みましたが、これは正常に機能します。そこで、fb_connect ファクトリ関数を作成しました。問題は、すべてのページ(すべてのコントローラー)で、すべてのコントローラーのコンストラクターでそのfb_connectを定義する必要があることです-たとえば:

function welcome($scope,fb_connect){});

すべてのコントローラーで毎回これらの関数を定義する必要なく、Angular を使用してこの種のアクションを実行する適切な方法は何ですか?

ありがとう

4

3 に答える 3

1

ファクトリとサービスの設定はすべて、Angularの依存性注入システムの一部です。そのシステムを使用すると、他の注入されたものに依存するものを作成する必要がある場合に最適です。これは、依存関係の大きなツリーです。また、コード内のあらゆる場所でオブジェクトの同じインスタンスを使用するように、シングルトンを作成するのにも適しています。

あなたの場合、これらの利点のどちらも当てはまらないように思えます。Angular の DI を使用しないことをお勧めします。グローバルに定義された関数があり、それを直接呼び出して DI をスキップするだけです。それは何も悪いことではありません。

もちろん、それは Ajax 呼び出しを行うと言うので、Angular の $http サービスに依存していませんか?

于 2013-06-29T21:27:48.857 に答える
0

あなたの2つのオプションは次のとおりです。

  • で関数を宣言します$rootScope
  • サービスとして注入する

私のアドバイスは、それをサービスにすることです。サービスの全体的な目的は、次の引用のように、Angular.js ドキュメントで説明されています。

Angular サービスは、Web アプリに共通する特定のタスクを実行するシングルトンです... Angular サービスを使用するには、サービスに依存する依存 (コントローラーまたは別のサービス) の依存関係として識別します。

質問で述べたように、サービスを使用するすべてのコントローラーでサービスを定義しないことをお勧めし$rootScopeます。すべてのコントローラーにもそれを注入します。したがって、実際にはどちらを好むかという問題ですが、質問に答えるために、ファクトリまたはサービスを使用する適切な方法は、それを使用するコントローラーに注入することです.

于 2013-06-30T05:33:53.933 に答える