为什么要将“笨拙”的组件提取到index.ts ngModule?

时间:2018-11-21 20:44:55

标签: angular

原谅我,如果我用错了术语,我是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
]
})

还是我还有很多要理解的地方,而这里缺少明显的东西……

1 个答案:

答案 0 :(得分:2)

在模块中组织组件有两个优点。智能组件和哑组件的分离也是如此。

他们在Google上曾表示,每个模块大约有1.5个组件。原因是模块可以轻松地重用,而组件则不能。另外,模块可以延迟加载和挂树。

智能组件和哑组件是一种设计模式,可简化组件的重用。笨拙的组件始终可以重复使用,而不必担心副作用或您需要深入了解的怪异服务。使它们非常易于重用,意味着您很可能会在一两天之内重用它们。

一个组件只能在一个模块中。假设您具有功能模块,这意味着您无法跨模块重用功能。这是非常不希望的。不过,一个模块可以导入到您想要的其他多个模块中,而且角度编译器非常聪明,不会将代码两次包含在包中。

索引文件是这样,因此您可以从同一位置导入模块。对于库很有用,实际上,您的哑组件是您自己的组件库。

我希望我随机列出一些原因对您有意义...