从具有forRoot选项的共享模块导出的组件和模块在延迟加载的模块

时间:2017-03-09 06:04:30

标签: angular lazy-loading

目前的行为
我从' @ angular / core'中导出CommonModule,从SharedModule导出一些可重用的自定义组件和自定义服务作为静态forRoot:ModuleWithProviders。我通过调用forRoot函数在AppModule中导入SharedModule。现在,SharedModule导出的所有模块和组件都可以在AppModule中使用,我可以在AppComponent中使用它。但是当我尝试从延迟加载的模块组件导入和使用相同的模块和组件时,我收到错误

**错误:模板解析错误:

**这部分原因是因为CommonModule也是从SharedModule导出的 LazyLoadedModuleComponent @ 4:3属性绑定ngIf未被嵌入式模板上的任何指令使用。确保属性名称拼写正确,并且所有指令都列在" @ NgModule.declarations"中。 ("

这是因为SharedComponent也是从SharedModule导出的。这在延迟加载的模块中不可用。

已知解决方案: - 如果我在LazyLoadedModule中导入SharedModule,则不会导致此错误。但后来我将从许多模块导入SharedModule模块。 但是,共享模块的服务可以在任何地方使用,并且可以正常工作。

预期行为
如上所述,如果我在根模块(即AppModule)中导入任何模块(如SharedModule),则所有从SharedModule导出的模块和组件都应该可用于所有子模块,包括延迟加载的模块。似乎forRoot仅适用于服务。

使用说明书轻微复制问题

创建了plunker
"https://plnkr.co/edit/8MJCwoFCZ7yniAHl2GYn?p=preview"

我在LazyLoadedModuleComponent的模板中评论了2行。这样它现在可以工作了。要测试请删除评论,以便可以复制错误 另外我用相同的代码创建了Github repo,请看它需要在本地机器上工作。

https://github.com/preetham1290/simple-demo

改变行为的动机/用例是什么?
通常,在大多数模块中都会导入少量模块,如角度/核心'中的CommonModule,以及可重复使用的自定义组件,指令。因此,我们可以在根模块中导入它,而不是在每个模块中导入它,因此可以在所有子模块中使用。

0 个答案:

没有答案