加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Angular2 RC5强制一个将组件导入移动到NgModule声明 – 为什么?

发布时间:2020-12-17 07:12:56 所属栏目:安全 来源:网络整理
导读:您以前在您的组件中已经在@Component()的指令,管道和提供程序中声明的任何import语句现在都必须被移动到@ngModule声明. 为什么是这样? 我明白,要减少组件中的样板,但这对于在应用程序中多次重复使用的声明是有意义的. 对于只用于一个单一组件的指令,组件,管
您以前在您的组件中已经在@Component()的指令,管道和提供程序中声明的任何import语句现在都必须被移动到@ngModule声明.

为什么是这样?

我明白,要减少组件中的样板,但这对于在应用程序中多次重复使用的声明是有意义的.

对于只用于一个单一组件的指令,组件,管道或提供程序,似乎非常不必要,并且会导致@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

解决方法

更新2

当我和NgModule自己做更多的工作时,我发现真正的答案是文档叫做Feature Modules.

这是一个想法,对于具有声明等的应用程序的子区域,您应该将每个区域都放入子模块AKA功能模块.

因此,只有在它们中使用的指令,而不是应用程序范围广泛的组件将不会变成组件模块,模块就是关于声明和提供程序的组件,组件正在进行正常的组件工作.

我不知道我是否喜欢这个装饰,但我绝对喜欢这样的供应商.现在,如果您遇到这些问题,调试服务生命周期问题,很容易知道在哪里寻找服务提供商.

还有一件事我还不能确定是否喜欢,功能模块不会从父模块继承模块导入.这意味着您必须在每个功能模块中导入BrowserModule,HttpModule和FormsModule.我明白为什么(要自给自足),但我讨厌冗长.

也就是说,您可以将所有常见导入包装到共享模块中,现在您只需要导入到功能模块中.这是ng2-translate建议的使用模式,例如,在“如果有多个NgModules”之后查看here.

更新1

回答这个问题的设计文档的特定部分是标题为“弃用”的部分(和其中的内容为什么在里面),这是一个direct link to that section.

原始答案

这个想法是,AoT(Ahead of Time)编译器可以一次使用一个模块并编译其所有的依赖项.同样的,在同一个模块中,您不必在组件环境中重新定义它们.

此外,路由器然后可以使用模块作为延迟加载的边界,因为它可以延迟加载模块,知道模块声明包含其所有依赖关系.

如果你阅读announcement和design document,你会得到更好的想法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读