我正在關注依賴注入的角度文檔,並試圖複製dependency injection tokens上的部分。angular2模塊:OpaqueToken的依賴注入從JS模塊工作,但不是內聯
在單獨的JS模塊定義OpaqueToken
// app-config.ts
import { OpaqueToken } from '@angular/core';
export let APP_CONFIG = new OpaqueToken('app.config');
// use class instead of interface
export interface AppConfig {
apiEndpoint: string;
title: string;
}
export const HERO_DI_CONFIG: AppConfig = {
apiEndpoint: 'api.heroes.com',
title: 'Dependency Injection'
};
進口APP_CONFIG
&還限定APP_CONFIG2
// app-modules.ts
import { APP_CONFIG, HERO_DI_CONFIG } from './app-config.ts';
export let APP_CONFIG2 = new OpaqueToken('app.config2');
@NgModule({
imports: [ BrowserModule ],
declarations: [ App ],
providers: [
{provide: APP_CONFIG, useValue: HERO_DI_CONFIG},
{provide: APP_CONFIG2, useValue: HERO_DI_CONFIG},
],
bootstrap: [ App ]
})
和inject
爲一個組件構造
// app.ts
import { APP_CONFIG, AppConfig } from './app-config.ts'
import { APP_CONFIG2 } from './app-module.ts'
export class App {
constructor(
@Inject(APP_CONFIG) public opaqueToken: AppConfig
@Inject(APP_CONFIG2) public opaqueToken2: any
) {
this.name = 'Angular2'
this.local = LOCAL_STRING
}
}
在外部模塊中定義的被正確注入,但與provide
在同一模塊中定義的APP_CONFIG2
將引發錯誤。這是爲什麼?
VM466 zone.js:323Error: (SystemJS) Error: Can't resolve all parameters for App: (Token_app_config, ?,
這裏有一個plunkr:http://plnkr.co/edit/5TkKAozC2vjXI9DfjMLg?p=preview
我剛剛發現了與Angular 2.1.0相同的問題。但是我沒有比你建議的更好的解決方案。 –