2016-04-25 7 views
0

私はAngular2フレームワークでいくつかのサンプルコードを扱っています。例えばHeroesのサンプル。現在理解していないことが1つあります。私のコンストラクタがRouter, Serviceまたはviceversaである必要があると言う要素は何ですか?RouteConfigとクラス、なぜコンストラクタがサービスとルータを必要とするのですか?

私は現在、彼らは仕事に@RouteConfigのために必要とされる理由を理解し、通話のためのサービスが、「Xの、あなたは、コンストラクタを必要とするので、ルータ、サービスであることを」

を言うには、明示的な要因ものですクラスはOnInitを実装していますか?クラスがアプリケーションコンポーネントのRouteConfigで参照されていますか?そのような注文をするのは、私はちょうどそれを逆にすることができますか?最後の質問は、私は誰かが私に、これはこのように設定する必要がある理由として、いくつかの洞察力を与えることができれば、他のはService, Router

あった1 compoenntがRouter,Serviceとして定義されていた場合、無行かなかった決定されたもの

定義がどこから来ているのかは、角度2の概念を理解するのに役立ちます。

これについて重要なdocファイルを私に教えることができれば、それも素晴らしいと思いますので、私はもっと読むことができます。あなたは

constructor(private router:Router, private service:Service) {} 

のようなコンストラクタを持っている場合は

答えて

1

は、あなたは角がのインスタンスを作成する必要がある場合Routerインスタンスが2番目のコンストラクタのパラメータとして、最初のコンストラクタのパラメータとServiceインスタンスとして渡されるべきであることをAngulars DIを伝えますそのクラス。

角度DIは、インジェクタツリーのプロバイダを検索し、一致するプロバイダを検出するインジェクタからインスタンスを返します。それがクラスを動作するため

@Component()@Directive()@Pipe()、または@Inectable()などのデコレータを持っている必要があり、それが唯一の角度によって作成されたインスタンスのために動作します。 new Service()またはnew Router()を使用する場合は、あなた自身であり、明示的に必要なコンストラクタパラメータを取得して渡す必要があります。

+0

サービスのために、それはタイプ "サービス"を注入するために木を見ます、同様にルータ? Angular2の新機能、より角度の鋭いデザイン方法論なので、ちょっとばかだけど、Aの木とBの木があるように聞こえてきて、それを見上げて配置するあなたのコンストラクタに? – Fallenreaper

+1

ツリーは 'bootstrap()'で始まり、そこではプロバイダが渡されます。各コンポーネントごとに、独自のプロバイダセットを持つ子インジェクタが作成され、このコンポーネントの子などに対しても同様に、などが作成されます。つまり、コンポーネントツリーに似たインジェクタツリーが表示されます。 DIがインスタンスにコンポーネントを渡す必要がある場合、プロバイダのこのコンポーネントのインジェクタを検索し始め、プロバイダから返されインスタンスが見つかると、プロバイダが登録されているインジェクタが見つかるまで上向きになりますこのタイプ。 –

関連する問題