Angular4 を更新する
Angular4OpaqueToken
では廃止され、 に置き換えられInjectionToken
ます。InjectionToken では、ジェネリック型パラメーターを渡すことができます。
export let APP_CONFIG = new InjectionToken<MyConfig>("app.config");
こちらもご覧ください
オリジナル
何?そもそもAngular2トークンとは?
不透明なトークンとは何ですか? それは何のために使用されますか?
トークンは、Angulars 依存性注入のプロバイダーのキーです。プロバイダーはキーで登録され、DI によってインスタンス化されたコンポーネント、ディレクティブ、およびサービス クラスは、プロバイダー キーによって検索される依存関係が注入されます。
DI は、型、文字列、OpaqueToken
およびオブジェクトをキーとしてサポートします。
export let APP_CONFIG = new OpaqueToken("app.config");
export let APP_CONFIG_2 = {};
providers: [
MyService, // type is key and value
{provide: MyService, useClass: MyFancyServiceImpl}, // type is key, `MyFancyServiceImpl` is the value (or rather the information how to create the value
{provide: 'myservice', useClass: MyService}, // key is a string
{provide: APP_CONFIG, useValue: {a: 'a', b: 'b'}} // key is an `OpaqueToken`
{provide: APP_CONFIG_2, useValue: {a: 'a', b: 'b'}} // key is an object
]
// one of these decorators needs to be added to make DI work
@Injectable()
@Component()
@Directive()
@Pipe()
class MyComponent {
// DI looks up a provider registered with the key `MyService`
constructor(private myService: MyService) {}
// Same as before but explicit
constructor(@Inject(MyService) private myService: MyService) {}
// DI looks up a provider registered with the key 'myService'
constructor(@Inject('myservice') private myService: MyService) {}
// DI looks up a provider registered with the `OpaqueKey` `APP_CONFIG`
constructor(@Inject(APP_CONFIG) private myConfig: any) {}
// DI looks up a provider registered with the object `APP_CONFIG_2`
constructor(@Inject(APP_CONFIG_2) private myConfig: any) {}
オブジェクト キー ( APP_CONFIG_2
) とOpaqueToken
( APP_CONFIG
) は、まったく同じインスタンスである必要があります。同じコンテンツの別のインスタンスは機能しません。これにより、キーが宣言されている場所と、プロバイダーとインジェクション ターゲットが同じキーを使用しているかどうかを簡単に調べることができます。
文字列の場合、異なるインスタンスになる可能性があります。これにより、同じ文字列値が異なるモジュールで使用され、競合や間違ったプロバイダーが注入される可能性があるというリスクが生じます。