带有TS的Angular2模块系统

时间:2016-11-17 12:14:50

标签: angular typescript

我正在考虑这个:https://github.com/mgechev/angular-seed以便以最基本的形式理解Angular模块系统。

在此种子项目中,SharedModuleindex.tsshared.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而不是仅使用function score(string,pattern) { counter=0 for(i=0;i<string.length;i++) { if(string.toUpperCase().substr(i,pattern.length) == pattern.toUpperCase()) counter++ } return counter } 来使用它们?

祝你好运

1 个答案:

答案 0 :(得分:2)

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

我建议您阅读https://angular.io/docs/ts/latest/guide/ngmodule.html以获取有关ngModules的深入指南

<强>更新

根据两个不同的编译器尝试并考虑它:角度编译器和typescript编译器。

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

将UserService添加到ngModule允许Angular编译器创建它的实例并将其提供给您的组件,服务等。如果您不这样做,您将收到类似以下内容的错误:&#34;未找到提供程序for UserService&#34;