web-dev-qa-db-ja.com

AngularJS:コントローラーとサービス

サービス、工場、コントローラー、ディレクティブなど、angularjsエンティティの適切な使用に関する記事をいくつか読んでいます。

私が特に懸念しているのは、コントローラーとサービスの比較です。ただし、どのサービスもできないことをコントローラーができること、またその逆は何であるかは、どの投稿でも教えてくれませんでした。

これをリストすることはできますか、それとも単に角度の使用が標準的であるという問題ですか?

28
user776686

Controllersは通常、ビューにバインドするために使用されます。コントローラーは、ビューのライフサイクルを管理するもので、ビューコントローラーと考える必要があります。ビューのインスタンスごとに新しいコントローラーが作成されます。つまり、特定のビューから離れて再度移動した場合、または特定のビューのインスタンスが複数ある場合は、そのたびに新しいコントローラーが作成されます。

Servicesは通常、アプリケーションのビジネスロジックとして使用されます。サービスは、一度作成されるという意味でシングルトンに似ており、インスタンスはアプリケーションのライフサイクル全体を通して維持されます。多くのビューまたはコンポーネントが必要とする論理関数を配置するのに適した場所であり、アプリケーションの複数の領域全体にアクセスする必要があるグローバルキャッシュも保持します。

69
Gil Moshayof

controllers-責任:ビューを初期化し、ビュー/スコープとサービス間の相互作用を仲介します。ビューとモデルに依存しますが、ビューとそれを機能させることにより関心があります。

services-責任:notビューまたはコントローラーに依存するビジネスサービスを提供します。その主な関心事は、消費者(コントローラー/ビュー/その他のサービス)に関係なく、サービスを提供することです。

永続性が違いに影響を与えるかどうか、私は確信していません。

13
pixelbits

AngularJSドキュメントによると、 https://docs.angularjs.org/guide/concepts

コントローラーは、ビューに関連するビジネスロジックと関係があります。 一方、サービスは、ビューとは無関係の再利用可能なビジネスロジックに関連しています。

9
Grateful

上記で述べたことに加えて。コントローラは、アプリケーションがそれほど大きくない間、アプリケーションのロジックを保持する場合もあります。しかし、アプリケーションが大きくなると、ロジックを移動してサービス(ファクトリーなど)を使用する必要があります。これにより、アプリケーションの周囲に必要な変数と関数に簡単にアクセスできるようになります。

1
charles okojie