【问题标题】:Angular 2 OpaqueToken results as null (RC6)Angular 2 OpaqueToken 结果为空(RC6)
【发布时间】:2016-09-22 05:50:52
【问题描述】:

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

我想要的功能:

我有一个常量对象。我希望该对象在应用程序范围内是可注入的。

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

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

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

也很简单。

在我的根模块定义中,我导入了 OpaqueToken 和我的常量对象,并使用映射文字将它们放入 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 吗?

感谢您的帮助!

【问题讨论】:

  • 看起来还可以,至少涉及到 OpaqueToken 的部分。无论如何,null 没有正当理由。是否没有其他错误会阻止正常执行?您可以使用 SystemJS 在 plunker 上重新创建问题吗?另请参阅this check list
  • 好的,这就是我一直遇到的问题(webpack?Angular?)——桶导入“一直”不起作用。我将我的导入语句更改为显式的完整路径导入,并且它起作用了。这是我不时发现的(可能有 30-50% 的时间),在某些情况下,桶装进口不起作用,没有明显的韵律或原因。嗯.....无论如何,已修复。

标签: angular dependency-injection


【解决方案1】:

好的,这就是我一直遇到的问题(webpack?Angular?)——桶导入“一直”不起作用。我将我的导入语句更改为显式的完整路径导入,并且它起作用了。这是我不时发现的(可能有 30-50% 的时间),在某些情况下,桶装进口不起作用,没有明显的韵律或原因。嗯……

总之,固定的。

【讨论】:

    猜你喜欢
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 2017-01-19
    • 1970-01-01
    • 2017-01-13
    • 2017-01-20
    相关资源
    最近更新 更多