2016-09-06 69 views
3

我正在關注依賴注入的角度文檔,並試圖複製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

+0

我剛剛發現了與Angular 2.1.0相同的問題。但是我沒有比你建議的更好的解決方案。 –

回答

0

爲了使它工作,你必須從app-config.ts出口APP_CONFIG2app-config.tsapp-modules.tsapp.ts文件中導入:

// app-config.ts 
import { OpaqueToken } from '@angular/core'; 

export let APP_CONFIG = new OpaqueToken('app.config'); 
export let APP_CONFIG2 = new OpaqueToken('app.config'); 
+0

我知道我可以從'app-config.ts'模塊中導出一個OpaqueToken,這就是我爲'APP_CONFIG'所做的。但我不明白爲什麼我不能從同一個調用'{provide:useValue:}'的模塊內聯導出不同的OpaqueToken。這就是問題所在。 – michael

1

這是不是Angular的問題,而是es6模塊之間的循環依賴關係。

在你的榜樣,app.ts進口APP_CONFIGapp.module.tsapp.module.ts進口Appapp.ts

這創建了無法解析的循環依賴關係。