优点有:
1. 粒度更大的模块化机制。在有这种模块化机制之前,每个组件就必须声明自己所引用的组件、管道、服务等,写起来非常繁琐。
2. 能支持更好的动态加载机制。如果用过1大概还记得要在1中实现动态模块加载有多难,但是2中它已经变成了内置功能。动态模块加载可以加快启动速度,节省内存,但是又不用借助什么特殊技术,和传统写法几乎无差别。
3. 有利于复用。模块本身是一个自给自足的生态系统,这就意味着各种设计合理的基础模块可以直接从这个应用搬到另一个应用中,或者作为公共库进行复用,而不用做什么修改。
缺点有:
1. 最终发布前变化太大,对于从alpha阶段就开始用的那些早鸟来说会不容易适应,同时需要修改遗留代码。但是这些对于从rc5之后开始学的同学并不是问题。
2. 容易混淆。有些人并不能深刻理解js/ts自带的模块与c++ namespace或Java package之间的差异,因此以为自带的模块化系统就足够了,但事实上后者才是ng2模块的等价物。这种错误的理解就容易导致NgModule无用论。