Angular 2 OpaqueToken结果为null(RC6)

时间:2016-09-08 01:50:37

标签: angular dependency-injection

我已经阅读了互联网上关于不透明令牌的所有内容,并且不认为我可以通过这本书做更多的事情。

我想要的功能:

我有一个常量对象。我希望该对象可以在应用程序范围内进行注射。

export const Constants = {...key/vals...}

很简单。 我创建了一个OpaqueToken,允许我使这个Constant对象可注入:

import {OpaqueToken} from '@angular/core';
export const AppConstants = new OpaqueToken('AppConstants');

也很简单。

在我的根模块定义中,我导入了OpaqueToken和我的Constants对象,并使用map literal将它们放入providers数组中:

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是实现它的方法。

有没有人知道为什么我为Constants对象的值返回null

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

好吧,那么,这就是我一直在使用的问题(webpack?Angular?) - 桶的进口并不是一直在工作的#34;。我将我的import语句更改为显式的全路径导入,并且它有效。这是我不时发现的(可能是30-50%的时间)桶进口在某些情况下无法工作,没有明显的押韵或理由。嗯......

无论如何,修复。