原谅我,如果我用错了术语,我是Angular的新手。
为了使下一段有意义,我的理解是容器是一个“智能”组件(您可以在其中管理数据订阅/观察器等),而其他组件则称为“哑包”,因为它们应该只是通过@input显示数据或通过@output显示信号更改...
基于这种理解,我正在研究Official @ngrx example application,他们正在遵循这种模式。但是,我注意到他们使用index.ts
通过一个类似桶文件的模块来“导出”书籍“哑”组件……我的问题是为什么?这只是样式选择吗?回购声明该项目正在展示常见的模式和最佳实践,我想进一步了解这一点,而我似乎找不到答案。
也许这是一种更好的方法,为什么比导入容器时更像声明容器那样,更喜欢导入(包含组件的)模块?
import { dumbModules } from 'blah...'
import { containerOne } from 'blah...'
import { containerTwo } from 'blah...'
@NgModule ({
imports: [
...,
dumbModules
],
declarations: [
...,
containerOne,
containerTwo
]
})
VS
import { dumbComponentOne } from 'blah...'
import { dumbComponentTwo } from 'blah...'
import { containerOne } from 'blah...'
import { containerTwo } from 'blah...'
@NgModule ({
imports: [
...
],
declarations: [
...,
dumbComponentOne,
dumbComponentTwo,
containerOne,
containerTwo
]
})
还是我还有很多要理解的地方,而这里缺少明显的东西……
答案 0 :(得分:2)
在模块中组织组件有两个优点。智能组件和哑组件的分离也是如此。
他们在Google上曾表示,每个模块大约有1.5个组件。原因是模块可以轻松地重用,而组件则不能。另外,模块可以延迟加载和挂树。
智能组件和哑组件是一种设计模式,可简化组件的重用。笨拙的组件始终可以重复使用,而不必担心副作用或您需要深入了解的怪异服务。使它们非常易于重用,意味着您很可能会在一两天之内重用它们。
一个组件只能在一个模块中。假设您具有功能模块,这意味着您无法跨模块重用功能。这是非常不希望的。不过,一个模块可以导入到您想要的其他多个模块中,而且角度编译器非常聪明,不会将代码两次包含在包中。
索引文件是这样,因此您可以从同一位置导入模块。对于库很有用,实际上,您的哑组件是您自己的组件库。
我希望我随机列出一些原因对您有意义...