模块和组件如何在内部保存?

时间:2017-02-20 19:45:17

标签: angular

关于Angular2-Practices,建议将多个其他模块上使用的声明放入共享模块中。 此外,强烈建议不要在此类共享模块上设置任何提供程序。 相反,如果共享模块与声明一起提供服务,则应添加一个名为forRoot的静态方法,该方法返回一个ModuleWithProviders-Object,并且仅由app-Module调用。 我看到了这背后的原因:由于每个延迟加载的模块都有自己的Dependency Injector,因此每个下载的模块都会检查其提供者并在惰性模块而不是应用程序范围的服务上使用。 我在这里看不到的内容:

  • 模块的重量是多少以及它是什么时候 产生的?由于app-Module必须调用forRoot-Method,因此 加载模块只是为了注入提供者。这个成本是否真的比拥有多个服务实例要好得多,无论如何应该是无状态的?我没有找到任何关于模块的信息以及它们应该有多大,特别是因为只创建一个共享模块是不可行的,因为每个消费模块都会从中导入所有内容。
  • 为什么Angular-Team甚至建议添加核心服务 模块通过forRoot? https://angular.io/docs/ts/latest/guide/ngmodule.html#!#core-for-root 由于此模块仅由app-Module引用,因此 这样做有什么好处?

由于Angular2-Logic仅扫描模块已知的声明,因此comon意义将告诉我们制作更小,更紧凑的共享模块。然而,由于几乎每个模块都有服务,因此必须由应用程序模块和每个消费者加载,因此必须进行某种权衡。

1 个答案:

答案 0 :(得分:1)

  • 服务通常不是无状态的,它们通常用于在组件之间共享状态,如果它只是一个组件或服务用于向另一个组件发送事件的共享可观察对象。 如果有一个或多个实例,则确实很重要。

模块非常轻巧。延迟加载模块中的forRoot()只会急切地注册提供者,模块的其余部分仍然是懒惰的。

  • 我不知道forRoot()中建议CoreModule的原因。