我有一个动态导入和编译的模块。我可以使用以下代码编译和渲染组件:
// 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 {
}
我应该使用另一种方法来使服务正常运行吗?
答案 0 :(得分:0)
不要在共享模块中指定应用程序范围的单例提供程序。导入该共享模块的延迟加载模块会创建自己的服务副本。
来源:https://angular.io/docs/ts/latest/guide/ngmodule.html#!#why-userservice-isn-t-shared
考虑到这些信息,我认为动态创建的模块与延迟加载的模块处于相同的情况。所以解决方案是在你的app模块中提供它。