Angular 2动态编译模块不提供服务

时间:2017-03-17 18:14:03

标签: angular

我有一个动态导入和编译的模块。我可以使用以下代码编译和渲染组件:

// Module is imported and available in the importedModule variable

const mod = this.compiler.compileModuleAndAllComponentsSync(<any>importedModule);

const factory = mod.componentFactories.find((comp) =>
    comp.componentType === route.component
);

const component = this.container.createComponent(factory);

以上工作并显示组件。但是,如果我尝试使用以下命令在组件的构造函数中注入服务:

constructor(private applicationService:ApplicationService) {
}

我收到以下错误:

  

没有ApplicationService的提供商!

我在动态导入的同一模块中提供服务:

@NgModule({
...
providers: [
    ApplicationService
  ]
})
export class TestModule {
}

服务:

@Injectable()
export class ApplicationService {
}

我应该使用另一种方法来使服务正常运行吗?

1 个答案:

答案 0 :(得分:0)

  

不要在共享模块中指定应用程序范围的单例提供程序。导入该共享模块的延迟加载模块会创建自己的服务副本。

来源:https://angular.io/docs/ts/latest/guide/ngmodule.html#!#why-userservice-isn-t-shared

考虑到这些信息,我认为动态创建的模块与延迟加载的模块处于相同的情况。所以解决方案是在你的app模块中提供它。