私は、インターネット上の不透明トークンに関するすべてを読んだことがあります。Angular 2 OpaqueTokenの結果はnullです(RC6)
機能が必要です:
私は定数オブジェクトを持っています。そのオブジェクトをアプリケーション全体に注入可能にしたい。
export const Constants = {...key/vals...}
非常に単純です。また
import {OpaqueToken} from '@angular/core';
export const AppConstants = new OpaqueToken('AppConstants');
非常にシンプル: は、私は私がこの定数オブジェクトの注射を行うことができるようにOpaqueTokenを作成します。私のルートモジュール定義で
、私は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でプランナーの問題を再現できますか? [this check list](http://stackoverflow.com/a/37166080/3731501)も参照してください。 – estus
さて、これは私が抱えてきた問題です。(webpack?Angular?)バレルの輸入は「いつも」働いていません。私は、インポート・ステートメントを明示的なフル・パス・インポートに変更しました。 これは、樽の輸入が特定のケースではうまくいかず、韻や理由がない場合でも、私が時折(おそらく30〜50%)見つけたものです。 うん..... .....とにかく、修正。 – dudewad