首页 文章

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

提问于
浏览
4

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

For me, @ngModule make things complex.

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

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

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

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

  • @NgModule提供导入/导出功能,但如何导入模块而不使用Typescript import子句,并拒绝其他@NgModule导入@NgModule私有组件/管道/服务 .

  • 没有@NgModule的路由前缀,想象一下3`团队维护@NgModule . 例如 . 任何基于post的应用程序的通用Comment模块,如何避免路由冲突,如何覆盖路由定义,如何在主机@NgModule中配置@ngModule?

  • 为什么路由配置由RouteModule.forRoot()(或forChild)注册,而不是@NgModule注释的 route 属性,如下所示 .

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

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

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

  • 如何挂钩@ngModule生命周期(mout / unmout或加载/卸载等,我在Angular文档中找不到desc),以及如何在内部没有@ngModule服务的情况下在组件/管道/服务之间共享数据状态?

  • 如果可能将@NgModule设计为可选功能,或者如果我们没有明确声明@ngModule,则默认情况下对应用程序使用隐式@ngModule .

谢谢 .

1 回答

  • 3

    据我所知 NgModule 主要是为了正确支持路由器延迟加载路由和组件 .

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

    • 不知道

    • 不明白这个问题

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

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

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

相关问题