2016-11-17 75 views
0

我在看这个:https://github.com/mgechev/angular-seed以便了解最基本形式的Angular Module System。带有TS的Angular2模块系统

在这个种子项目中有一个SharedModule,它既有index.ts也有shared.module.ts。在shared.module.ts它做出口Angular方式 - 与指令,出口,提供商等。在index.ts它重新出口它们。在app.module.ts它进口SharedModule.forRoot()这是完美的 - 这注册NameListService可用于整个应用程序。但是,如果要使用NameListService,则必须导入该文件,并且通过import { NameListService } from '../shared/index';完成,如home.component.ts中所示,顺便提一下,该文件也是home.module.ts的一部分,该文件还导入了SharedModule

根据我这是完全错误的。

为什么我需要像这样导入它 - 这打破了模块化 - 如果我使用了一个我没有写过的模块,从而不知道在哪里查找文件,该怎么办?

为什么我会打扰在shared.module.ts中创建和注册东西,如果我不得不通过shared/index.ts而不是仅仅使用shared/index.ts

问候

回答

1

我相信这个问题已经回答过上角的网站:https://angular.io/docs/ts/latest/cookbook/ngmodule-faq.html#!#q-ng-vs-js-modules

我会建议在ngModules

更新

深入指导阅读https://angular.io/docs/ts/latest/guide/ngmodule.html为试着用两种不同的编译器来考虑它:角编译器和打字稿编译器。

您通过路径引用UserService的事实允许打字稿编译器找到它。如果找不到UserService,则代码将无法编译。它还为您提供智能感知和类型检查。角度编译器不关心这一点。

将UserService添加到ngModule允许Angular编译器创建它的一个实例并将其提供给组件,服务等。如果你没有这样做,你会得到一个如下错误:“找不到UserService的提供者“

+0

是的。我知道这一点,但它感觉有点奇怪(不必要)并行使用两个系统,而没有它们彼此进行通信。我上面的例子的问题是,我必须指定UserService通过路径的位置,即使它是有效的Angular模块的一部分。 – mp3por

+0

我已经更新了我的答案 –