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