Angular EventEmitter与通过服务进行通信

MeM*_*Max 6 angular

让我们假设我们有一个深层嵌套架构,其中包含一个主要组件和3个子组件.例如:

todo->todo list->todo list action bar->todo list button
Run Code Online (Sandbox Code Playgroud)

还有其他组件.

当我们使用EventEmitter时,我们必须将所有层都放到todo组件中.替代方案是使具有可观察的通信服务从按钮组件与待办事件组件通信.

使用这种或那种方式有什么起伏?我该怎么办?

Rah*_*ngh 6

这是一个设计角度。

一般来说,我想出的是,如果应用程序大小中等到巨大,那么使用共享服务Behaviour SubjectReplay Subject将消息传输到其他组件。

更好的设计是ngrx在 Angular 中使用 redux。唯一的缺点是您需要为操作和减速器编写额外的代码,但优点是所有逻辑都与组件分离,而在 redux 世界中,这些组件被称为哑组件。一旦完成,它将成为救命稻草ngrx dev tools随时跟踪状态的救星,并且您可以轻松跟踪在何时以及如何调试和添加代码时触发哪个事件或操作。

只有当您的应用程序很小时,我才会建议您使用事件发射器,就像您被意大利面条式代码吞没的多个嵌套组件一样。您无法跟踪所有触发事件,然后您最终会重新编写代码。

更多关于使用事件发射器与共享服务链接。有一个特定的问题。

更多关于 ngrx链接。此链接使用 ngrx v2。

我使用 ngrx v.4 开发了一个小应用程序,以下是相同git的 git repo和工作示例