我正在考虑这个:https://github.com/mgechev/angular-seed以便以最基本的形式理解Angular模块系统。
在此种子项目中,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
而不是仅使用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
}
来使用它们?
祝你好运
答案 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;