コンポーネントは、特定のサービスが利用可能であることを要求し、入力を受け入れることもできます。いつサービスが必要なのか、いつ入力が必要なのでしょうか?サービス提供とコンポーネントへの入力の受け渡し
答えて
サービスは、多くの場合、コンポーネントのツリーで同じものを提供するのに適しています。たとえば、通常、Httpサービスはアプリケーションのすべてのコンポーネントで同じです。サービスのようなものがないと想像してください。あなたは同じコードをたくさん複製しなければならないし、どこでも何かの実装を渡す必要があります。アプリケーションのすべてのコンポーネントは、入力としてHttpServiceをその子に渡す必要があります。
入力は、他のものに1つのものを提供するのに適していることがよくあります。たとえば、%completeを進行状況バーに渡すと、親と子の間に緊密なやりとりができます。入力のようなものがないと想像してください。テキストボックスの値を設定するだけで、どこにでも情報を渡すたびにサービスを作成する必要があります。
考慮事項:
は、コンポーネントの親またはユーザーが渡されていたデータや機能に注意する必要があります、またはそれはあなたのプログラムやコンポーネントツリーの一部の単なる側面ですか?たとえば、OrderComponent
は、OrderService
に依存する場合があります。 OrderComponent
の親コンポーネントは、OrderService
を必ずしも知っている必要はありません(どのOrderServiceを使用するか、OrderServiceが使用するHttpServiceの実装など)が分からないため、サービスを維持することが理にかなっています。プログレスバーの場合、直接的な親は完全なパーセンテージを知っています。それが分からなければ、そこにプログレスバーを置くのはなぜですか?
データまたは機能がコンポーネントの目的に直接関係して渡されていますか?たとえば、HttpServiceの特定の実装は、OrderComponent
の第2の関心事であり、その主な仕事は注文を表示することです(それはそうします)が、完了率は進行状況バーの主な関心事です。
データは実行時に変更されますか?変更入力は変更検出をトリガしますが、サービス内で変化するプリミティブ値は変化しません。サービスには通常、変更のない機能があります。サービス内のデータをコンポーネント内で使用する必要がある場合は、BehaviorSubject
またはその他のObservable
をサービスに入れ、async
パイプを使用してその値をコンポーネントテンプレートに表示することができます。
コンポーネントにサービスを期待させることができますが、同じ親コンポーネント内のそのコンポーネントの2つのインスタンスが同じ提供されたサービスインスタンスを共有する必要があることを心配してください。親コンポーネントは、そのサービスを提供する別のコンポーネントを中間に作成することによって、すべての子コンポーネントに同じサービスを提供することを避けることができます。
ここにコンポーネントの相互作用についての詳細: https://angular.io/docs/ts/latest/cookbook/component-communication.html
良い質問です。私は、サービスに結合されているコンポーネントを必要としているのか、より構成可能であり、独自の立場にあるコンポーネントが必要なのか、という答えが出てくると思います。
両方のユースケースがあります。たとえば、コンポーネントはサービスに依存してデータを取得する場合があります。いいところは、呼び出し元のコンポーネントから構成することが少ないということです(データを渡す必要はありません。すぐに使えます)。一方、データを渡す場合は、コンポーネントのプラグイン可能性が低くなります。
サービスに依存しないコンポーネント(つまり、データを取得するために)さまざまな他のコンテキストでより使用可能かもしれません。たとえば、サービスを利用してデータを取得する代わりに、データを親コンポーネントからその@Inputプロパティに渡すことができます。
- 1. ダイアログから親コンポーネントへのmd入力値の受け渡し
- 2. 親コンポーネントを介した入力と出力の受け渡し
- 3. Vue.jsコンポーネントへのデータの受け渡し
- 4. 親コンポーネントへの親コンポーネントへの子コンポーネントクラスの受け渡し
- 5. Pythonからのシェル入力へのパラメータの受け渡し
- 6. angularJSの子コンポーネントから親コンポーネントへの値の受け渡し
- 7. ngFor(角)内のコンポーネントへのコンポーネント参照の受け渡し
- 8. あるコンポーネントから別のコンポーネントへの値の受け渡し
- 9. ユーザー入力からAフレームコンポーネントへのテクスチャマップの受け渡し
- 10. フォーム入力からフラスコへの変数の受け渡しURL
- 11. ビューからコントローラへのフォーム入力の受け渡し
- 12. Windowsスケジュールタスクへの入力変数の受け渡し
- 13. JavaScript関数への入力値の受け渡し
- 14. 親コンポーネントから子コンポーネントへの小道具の受け渡し
- 15. 子コンポーネントから親コンポーネントへのデータの受け渡し
- 16. ReactJsコンポーネントからコンポーネントへの引数の受け渡し
- 17. 親ウィンドウから入力ウィンドウへの入力値の受け渡し
- 18. SQLサーバーストアドプロシージャへの入力パラメータとしてのテーブル名の受け渡し
- 19. NgModuleとコンポーネントのサービスを提供することとの違い
- 20. CRMの前提からSSRSレポートへのGUIDの受け渡し
- 21. コンポーネントへのイベントバインディングのパラメータの受け渡し
- 22. ReactネイティブのOnPress関数へのコンポーネント/オブジェクトプロパティの受け渡し
- 23. Reactネイティブのコンポーネントへのパラメータの受け渡し
- 24. angle2コンポーネントのquerySelector()への文字列変数の受け渡し
- 25. 角。コンポーネントから親コントローラーへのデータの受け渡し
- 26. Angular2 Newbie親から子コンポーネントへのデータの受け渡し
- 27. WCFファイルを入力として受け入れるRESTfulなサービス
- 28. アングル材質のmdPanelサービスへの指示の受け渡し
- 29. Objective CのJSON Webサービスへのパラメータの受け渡し
- 30. JSONからWebサービスへのHTMLの受け渡し