我已經閱讀了互聯網上關於不透明令牌的所有內容,並不認爲我可以通過本書更多地完成這項工作。Angular 2 OpaqueToken結果爲空(RC6)
功能我想:
我有一個常量對象。我希望該對象在整個應用程序範圍內可注射。
export const Constants = {...key/vals...}
很簡單。 我創建一個OpaqueToken讓我做這個常量對象注射:
import {OpaqueToken} from '@angular/core';
export const AppConstants = new OpaqueToken('AppConstants');
也很簡單。
以我根模塊定義,我同時導入OpaqueToken和我的常量對象,並使用地圖字面其放置在供應商陣列:
import {Constants} from '....';
import {AppConstants} from '....';
@NgModule({
...
providers: [
{provide: AppConstants, useValue: Constants}
],
...
})
好真棒。現在,在我的任何導入模塊,如果我理解整個「服務是全球可用」的事情,我應該能夠做到以下幾點:
import {AppConstants} from '.....';
@Injectable()
export class MyCoolClass {
constructor(@Inject(AppConstants) private constants:any) {
}
someMethod(){
let myVar = this.constants['someValue'];
}
}
編譯沒有問題(我使用的WebPack) 。然而,在運行時,我得到:
EXCEPTION: Error in ./App class App_Host - inline template:0:0 caused by: Cannot read property 'someValue' of null
顯然,這已被簡化,所以你可以閱讀更容易,但我真的只是轉換變量名。
我在這裏不瞭解DI嗎?我認爲OpaqueToken應該是解決將固定值注入構造函數的問題,我認爲@Inject是實現它的方式。
有沒有人有任何想法爲什麼我null
返回我的常量對象的值?
感謝您的幫助!
看起來沒問題,至少有關於OpaqueToken的部分。任何方式,沒有'null'的有效理由。是否沒有其他錯誤會阻止正常執行?你可以用SystemJS重新創建這個問題嗎?另請參閱[此檢查列表](http://stackoverflow.com/a/37166080/3731501)。 – estus
好的,所以,這是我一直在使用的問題(webpack?Angular?) - 每桶進口不「始終」工作。我將我的導入語句更改爲明確的全路徑導入,並且工作正常。 這是我不時發現的情況(可能是30-50%的時間),在某些情況下桶的進口不起作用,沒有明顯的韻律或原因。 嗯......無論如何,固定。 – dudewad