8

私はプロバイダが別のクラスからサービスを受けることを理解していますが、マルチプロバイダとトークンは何ですか?angular2のマルチプロバイダとは

また、私たちが行うときmulti=truemulti: trueを使用

provide(NG_VALIDATORS, { useExisting: class), multi: true }) 

答えて

0

は、プロバイダがマルチプロバイダであること角度を伝えます。前述のように、マルチプロバイダでは、DIの単一のトークンに対して複数の値を提供できます。

用途:

我々は自動的に誰もがコンポーネントの装飾でそれらを定義することなく、私達の全体のアプリケーションで利用可能であるべきディレクティブのカップルを持っている場合、我々はマルチプロバイダを利用することと拡張することによってそれを行うことができますPLATFORM_DIRECTIVESの注射対象は何ですか?

@Directive(...) 
class Draggable { } 

@Directive(...) 
class Morphable { } 

@Component(...) 
class RootCmp { } 

とドキュメントから

// at bootstrap 
bootstrap(RooCmp, [ 
    provide(PLATFORM_DIRECTIVES, {useValue: Draggable, multi: true}), 
    provide(PLATFORM_DIRECTIVES, {useValue: Morphable, multi: true}) 
]); 

Details

+0

DI – blackHawk

+0

の単一トークンに複数の値を指定するとはどういう意味ですか? –

+0

関数が次のように宣言した場合、それはどういう意味ですか:private get isReverse()何がキーワードを取得するか – blackHawk

0

は同じトークン(マルチプロバイダ)と一致複数のプロバイダを作成します。 システムにはいくつかのデフォルトプロバイダが付属しており、ユーザーは 追加プロバイダを登録することができるプラグイン可能なサービスの作成にマルチプロバイダが使用されます。既定のプロバイダーと追加のプロバイダーの組み合わせは、システムの動作を推進するために使用されます。

Source

11

multi: true 1つのプロバイダトークンは要素のアレイを提供することを意味します。たとえば、ルータサポートのすべてのディレクティブrouterLink,router-outletROUTER_DIRECTIVESによって提供されています。
新しいプロバイダがトークンROUTER_DIRECTIVESに登録されている場合、以前に登録されたディレクティブよりも優先されます。 multi: true(最初の登録済みと新しいプロバイダの)が設定されている場合、新しいディレクティブは、上書きされる代わりに、以前に登録されたディレクティブに追加されます。

ROUTER_DIRECTIVESが注入されると(constructor(@Inject(ROUTER_DIRECTIVES) directives) {})、指示インスタンスの配列が注入されます。通常、ROUTER_DIRECTIVESを注射するのは意味がありません。 multi: trueなので、例として使用しました。

+0

有用な場合の例を教えてください – theFreedomBanana

+1

https:// stackoverflowの例を参照してください。アプリケーションが起動する前の/ config/39033835/angularjs2-preload-server-configuration-39033958#39033958複数のファクトリ関数が 'APP_INITIALIZERS'の下で提供され、Angularはそれらのそれぞれを)返された 'Promise'を待ちます。 –