【问题标题】:Angular using InjectionToken errorAngular 使用 InjectionToken 错误
【发布时间】:2017-06-01 00:13:30
【问题描述】:

我们需要使用 InjectionToken 注入一个值,但我们收到以下错误:

在静态解析符号值时遇到错误。只能引用初始化的变量和常量,因为这个变量的值是 ne 由模板编译器编辑(在原始 .ts 文件中的位置 3:12),在 C:/Projekte/Git/KWKPortal/App/src/app/shared/dnn.module.ts 中解析符号 $,resolvin g 符号 AppModule 在 C:/Projekte/Git/KWKPortal/App/src/app/app.module.ts 中,解析符号 AppModule 在 C:/Projekte/Git/KWKPortal/App/src/app/app.module.ts 中,资源 lving 符号 AppModule 在 C:/Projekte/Git/KWKPortal/App/src/app/app.module.ts

以下是我们提供此值注入的方式:

import { SF, $, dnn } from './shared/dnn.module';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule
  ],
  providers: [
    { provide: SF, useValue: $.ServicesFramework(dnn.getVars().ModuleId) }
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

这是我们的dnn.module的代码:

import { InjectionToken } from '@angular/core';

export let $: any;
export let dnn: any;
export let SF = new InjectionToken<any>('sf');

我想知道为什么会这样? useValue 不适合这种情况吗?

【问题讨论】:

    标签: angular


    【解决方案1】:

    幸运的是,我使用 factory 解决了这个问题,代码如下:

    export function servicesFrameworkFactory() {
      return $.ServicesFramework(dnn.getVars().ModuleId);
    }
    
    @NgModule({
      declarations: [
        AppComponent
      ],
      imports: [
        BrowserModule,
        FormsModule,
        HttpModule
      ],
      providers: [{
        provide: SF,
        useFactory: servicesFrameworkFactory,
        deps: []
      }],
      bootstrap: [AppComponent]
    })
    export class AppModule { }
    

    我不知道是否有更清洁的方法来解决这个问题,但这解决了原来的线程。

    【讨论】:

      猜你喜欢
      • 2020-05-19
      • 1970-01-01
      • 1970-01-01
      • 2019-04-18
      • 2017-09-11
      • 2018-10-19
      • 2018-04-08
      • 2018-05-22
      • 2017-09-14
      相关资源
      最近更新 更多