对Angular 2中提供的@NgModule感到困惑

时间:2016-08-17 05:19:59

标签: angular

我正在尝试使用Angular2,当我将基本代码升级到Angular 2.0.0-RC5时,我发现引入了一个突破性的变化,@ NgModule,相当于 angular.moudle()在Angularjs 1.x?

对我来说,@ ngModule让事情变得复杂。

当我使用Angular 1.x时,社区中有一些关于angular.module的抱怨,因为存在一些javascript模块系统。

默认情况下,Angular-cli生成的代码基于SystemJS,我们可以使用Typescirpt来组织源代码的结构。

为什么我们需要@NgModule,它是运行时应用程序组织的逻辑视图?

我假设为Angular2指定了基于模块的体系结构的@NgModule,并且@ngModule可以在不同的应用程序中重用。与我过去几年使用的其他模块/ bundle / plugin框架相比。它缺乏一些功能。

  1. @NgModule提供导入/导出功能,但如何在没有Typescript import 子句的情况下导入模块,并拒绝其他@NgModule导入@NgModule私有组件/管道/服务。
  2. 没有@NgModule的路由前缀,想象一下@ 3g团队维护@NgModule。例如。任何基于post的应用程序的常见 Comment 模块,如何避免路由冲突,如何覆盖路由定义,如何在主机@NgModule中配置@ngModule?
  3. 为什么路由配置由RouteModule.forRoot()(或forChild)注册,而不是@NgModule注释的路由属性,如下所示。

    @NgModule(route:{prefix:'/comment', config: commentRouteConfigs}) export class CommentModule{}

    目前,@ NuModule API耦合路由配置。

  4. 如何在主机模块中导入模块时覆盖@NgModule中定义的组件模板。

  5. 如何挂钩@ngModule生命周期(mout / unmout或加载/卸载等,我在Angular文档中找不到desc),以及如何在@ngModule中没有服务的情况下在组件/管道/服务之间共享数据状态内部?
  6. 如果可能将@NgModule设计为可选功能,或者如果我们未明确声明@ngModule,则默认情况下对应用程序使用隐式@ngModule。
  7. 感谢。

1 个答案:

答案 0 :(得分:3)

据我所知ALTER TABLE YourTableName ADD CONSTRAINT UK_Name_Hobby1_Hobby2 UNIQUE (Name, Hobby1,Hobby2); 主要是为了正确支持路由器延迟加载路由和组件。

  1. NgModule的导入和导出与TS导入和导出无关。它主要是关于依赖注入和编译模板。

  2. 不知道

  3. 不明白这个问题

  4. Angular2根本不支持覆盖模板。有一些构建工具允许这样做,但Angular2本身并没有提供任何帮助。

  5. 我已经看到在讨论中提到的模块生命周期回调但却找不到具体的东西(如https://github.com/angular/angular/issues/10808#issuecomment-239823985

  6. 我想这是可能的,但我不知道Angular2团队是否考虑过这个。