2016-09-08 83 views
0

我已经阅读了互联网上关于不透明令牌的所有内容,并不认为我可以通过本书更多地完成这项工作。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返回我的常量对象的值?

感谢您的帮助!

+0

看起来没问题,至少有关于OpaqueToken的部分。任何方式,没有'null'的有效理由。是否没有其他错误会阻止正常执行?你可以用SystemJS重新创建这个问题吗?另请参阅[此检查列表](http://stackoverflow.com/a/37166080/3731501)。 – estus

+0

好的,所以,这是我一直在使用的问题(webpack?Angular?) - 每桶进口不“始终”工作。我将我的导入语句更改为明确的全路径导入,并且工作正常。 这是我不时发现的情况(可能是30-50%的时间),在某些情况下桶的进口不起作用,没有明显的韵律或原因。 嗯......无论如何,固定。 – dudewad

回答

0

好的,所以,这是我一直在使用的问题(webpack?Angular?) - 桶的导入不能“始终”工作。我将我的导入语句更改为明确的全路径导入,并且工作正常。这是我不时发现的情况(大概是30-50%的时间),在某些情况下桶的进口不起作用,没有明显的韵律或原因。嗯.....

无论如何,固定。