为什么是这样?
我明白,要减少组件中的样板,但这对于在应用程序中多次重复使用的声明是有意义的.
对于只用于一个单一组件的指令,组件,管道或提供程序,似乎非常不必要,并且会导致@ngModules文件的沉重的膨胀.
在下面的链接中,在最后一步5中,它指出:
For RC5,you can leave your components,directives and pipes in the
directives and pipes properties of your @Component Metadata. In fact,
we automatically hoist (add) them to the NgModule to which they
belong.This option is temporary for backward compatibility. It will be
removed in the final release of Angular 2.0.Get ahead of the game and start moving your component directives and
pipes into module declarations as soon as possible. We intend to
delete all deprecated class,methods,and properties in the next RC.
资料来源:RC4 to RC5 migration
解决方法
当我和NgModule自己做更多的工作时,我发现真正的答案是文档叫做Feature Modules.
这是一个想法,对于具有声明等的应用程序的子区域,您应该将每个区域都放入子模块AKA功能模块.
因此,只有在它们中使用的指令,而不是应用程序范围广泛的组件将不会变成组件模块,模块就是关于声明和提供程序的组件,组件正在进行正常的组件工作.
我不知道我是否喜欢这个装饰,但我绝对喜欢这样的供应商.现在,如果您遇到这些问题,调试服务生命周期问题,很容易知道在哪里寻找服务提供商.
还有一件事我还不能确定是否喜欢,功能模块不会从父模块继承模块导入.这意味着您必须在每个功能模块中导入browserModule,HttpModule和FormsModule.我明白为什么(要自给自足),但我讨厌冗长.
也就是说,您可以将所有常见导入包装到共享模块中,现在您只需要导入到功能模块中.这是ng2-translate建议的使用模式,例如,在“如果有多个NgModules”之后查看here.
更新1
回答这个问题的设计文档的特定部分是标题为“弃用”的部分(和其中的内容为什么在里面),这是一个direct link to that section.
原始答案
这个想法是,AoT(Ahead of Time)编译器可以一次使用一个模块并编译其所有的依赖项.同样的,在同一个模块中,您不必在组件环境中重新定义它们.
此外,路由器然后可以使用模块作为延迟加载的边界,因为它可以延迟加载模块,知道模块声明包含其所有依赖关系.
如果你阅读@L_502_4@和design document,你会得到更好的想法.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。