2017-07-12 30 views
1

我创建了以下模块,跟随这guide角模块 - 遇到错误解析符号值静态

@NgModule({ 
    // ... 
}) 
export class MatchMediaModule { 

    private static forRootHasAlreadyBeenCalled: boolean = false; 

    // The method is used for providing the 
    // feature module's providers only ONCE 
    static forRoot(): ModuleWithProviders { 
     if (this.forRootHasAlreadyBeenCalled) { 
      throw new Error('ModuleWithProviders - forRoot() should only be called once in the root module!'); 
     } 

     this.forRootHasAlreadyBeenCalled = true; 

     return { 
      ngModule: MatchMediaModule, 
      providers: [MatchMediaService], 
     }; 
    } 

} 

导入MatchMediaModule模块插入CoreModule后:

@NgModule({ 
    imports: [ 
     CommonModule, 
     MatchMediaModule.forRoot() // <-- 
    ], 
}) 
export class CoreModule { } 

和运行ng serve ,抛出以下错误:

遇到错误时遇到静态解析符号值。调用 函数'MatchMediaModule',不支持函数调用。 考虑具有一个 导出的函数的引用代替功能或λ,在 /Users/alex/www/mdello-port/src/app/core/core.module.ts解析符号CoreModule,在 解决 符号CoreModule /Users/alex/www/mdello-port/src/app/core/core.module.ts

然而,做一些微小的变化,导致CLI重新编译应用程序后,一切都正常运行没有问题。

删除forRoot()方法并直接提供服务似乎也起作用。不过,我想保留在提到的模块的延迟加载期间防止多个单例实例创建的好处。

有没有办法解决这个错误而不影响上述好处?

回答

1

以下面的方式重写forRoot()弥补了问题:

@NgModule({ 
    // ... 
}) 
export class MatchMediaModule { 

    // ** REMOVED ** 

    // The method is used for providing the 
    // feature module's providers only ONCE 
    static forRoot(): ModuleWithProviders { 

     // ** REMOVED ** 

     return { 
      ngModule: MatchMediaModule, 
      providers: [MatchMediaService], 
     }; 
    } 

} 

好像这个问题是由forRoot()方法的副作用引起的。

+0

它的工作为什么它的工作对你有什么想法?其实,我是新的ng4。 – developerbhuwan

相关问题