【问题标题】:Using OpaqueToken in Angular 2在 Angular 2 中使用 OpaqueToken
【发布时间】:2017-03-19 06:18:55
【问题描述】:

我在我的示例 Angular 2 应用程序中使用 OpaqueToken,下面是相关代码

//app.module.ts
......
....
export const MY_CONFIG_TOKEN = new OpaqueToken('MY_CONFIG_TOKEN');

providers: [
         { provide: MY_CONFIG_TOKEN, useValue: {test:'test'} }
         ]
....
.....        

下面是我使用令牌进行依赖注入的相关根组件代码

....
....
constructor(@Inject(MY_CONFIG_TOKEN) private myconfig:any,){}   

在浏览器中运行此应用程序会引发以下错误

无法解析 AppComponent 的所有参数

知道可能是什么原因导致此错误。 如果需要提供更多信息,请告诉我。

【问题讨论】:

  • 尝试从您在any 之后编写的构造函数中删除,。这里myconfig:any,
  • 还是同样的错误
  • 参考此answer 并按照这些步骤操作
  • const改成let

标签: angular


【解决方案1】:

这是一个有效的 plunk https://plnkr.co/edit/pDNFSP?p=preview,展示了如何使用 OpaqueToken。 以下是定义 OpaqueToken 的方式:

import { OpaqueToken } from '@angular/core';
export let MY_CONFIG_TOKEN = new OpaqueToken('configToken');

然后你在你的主模块中导入它:

import { MY_CONFIG_TOKEN } from './token';

然后你在providers下注册

providers: [{provide: MY_CONFIG_TOKEN, useValue: {test:'test'} }],

最后你可以像这样使用它:

constructor(@Inject(MY_CONFIG_TOKEN) private myconfig:any) {
    myconfig.value = "Hello";
    console.log(myconfig.value);
  }

在 App 组件中,我已将一个虚拟的“值”属性附加到令牌,并在构造函数中设置后将其显示在控制台中。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    修改这个

    export const MY_CONFIG_TOKEN = new OpaqueToken('MY_CONFIG_TOKEN');
    

    declare let MY_CONFIG_TOKEN = new OpaqueToken(window_object);
    

    【讨论】:

    • 这显示编译时类型脚本错误,“环境上下文中不允许使用初始化程序。”
    • 我正在使用 Angular cli,不知道这些信息是否有帮助
    • 您是否按照这些步骤进行操作?还是不行?
    猜你喜欢
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    • 2016-06-26
    相关资源
    最近更新 更多